无法在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 【问题描述】:

我对@9​​87654321@ 很陌生。我在将我从 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