无法在springboot中将'java.lang.string'的值从jsp转换为'java.localtime'
Posted
技术标签:
【中文标题】无法在springboot中将\'java.lang.string\'的值从jsp转换为\'java.localtime\'【英文标题】:Failed to convert value of 'java.lang.string' to 'java.localtime' from jsp in springboot无法在springboot中将'java.lang.string'的值从jsp转换为'java.localtime' 【发布时间】:2020-07-25 07:57:54 【问题描述】:我对@987654321@ 很陌生。我在将我从 jsp 表单获得的字符串值转换为 LocalTime 时遇到了一些问题。 例如,我有 jsp 表单,我在其中编写输入:
<div class="col-lg-7">
<form:input path="shiftStart" type="time" name="shiftStart" id="shift-start-time" min="08:00:00" max="17:45:00" step="900"></form:input>
</div>
我有以下控制器,我尝试将这个字符串值转换为 LocalTime 变量:
@PostMapping("/add-shift")
public String createShiftForm(@ModelAttribute("shiftForm") @Valid TimeTable timeTable, BindingResult result, Model model, @RequestParam("shiftStart") String shiftStart )
if (result.hasErrors())
return "/add-shift";
LocalTime startShift = LocalTime.parse(shiftStart);
model.addAttribute("shiftStart",startShift);
return "redirect:/admin";
我收到以下错误:
Failed to convert property value of type java.lang.String to required type java.time.LocalTime for property shiftEnd; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.persistence.Column java.time.LocalTime] for value 09:15; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [09:15]
有人可以帮忙吗?
【问题讨论】:
您发送的字符串格式是什么? 我正在发送 HH:mm,fo 例如 09:15,而不是尝试将其转换为 LocalTime 【参考方案1】:我找到了一个解决方案:只需要在Controller
中传递不带@RequestParametr
的参数并将字符串转换为本地变量中的本地时间,如下所示:
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.TIME) LocalTime shiftStart
在这里讨论过:How to use LocalDateTime RequestParam in Spring? I get "Failed to convert String to LocalDateTime"
【讨论】:
【参考方案2】:您需要将String
的值解析为LocalTime
,这样您就需要弄清楚您收到的格式是什么,然后添加以下代码:
LocalTime startShift = LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm"));
【讨论】:
【参考方案3】:正如 Elarbi 所说,我还建议使用标准格式化程序:
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_TIME;
LocalTime lt = LocalTime.parse("10:15:45", formatter);
或直接:
LocalTime lt = LocalTime.parse("10:15:45", DateTimeFormatter.ISO_LOCAL_TIME);
有关模式列表,请考虑 Oracle 官方文档中的 this。
【讨论】:
不幸的是没有帮助 很高兴您找到了解决方案;我不喜欢你找到的解决方案,好像有人编辑了你的表单并发送了不同的格式,你会处理一个异常,你没有捕获它并且用户没有得到任何关于它的信息以上是关于无法在springboot中将'java.lang.string'的值从jsp转换为'java.localtime'的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 应用程序中将 java lang long 转换为实体类
SpringBoot + Mybatis + MySQL,java.lang.IllegalStateException:无法加载ApplicationContext
如何修复CrudRepository.save(java.lang.Object)是springboot中的无法访问方法?
java.lang.IllegalStateException:在 Spring Boot 中无法加载 ApplicationContext 错误
java.lang.IllegalStateException:在使用 Spring Boot 实现开放 API 时无法读取类的元数据
Spring boot - java.lang.ClassNotFoundException:javax.servlet.ServletContext 和无法启动 EmbeddedWebApplica