【发布时间】:2018-07-16 20:33:04
【问题描述】:
在我的 Spring Boot 应用程序中,我需要处理带有日期时间字段的表单并将其转换为 Java 中的LocalDateTime。
我指定了模式"YYYY-MM-dd HH:mm",当我提交带有输入值1990-01-01 10:10的表单时它无法转换。
这是表单对象:
public class UserForm {
@NotNull
@DateTimeFormat(pattern = "YYYY-MM-dd HH:mm")
private LocalDateTime dateTime;
// getters, setters
}
控制器:
@RequestMapping("/users")
@Controller
public class UserController {
@GetMapping("")
public String userForm(UserForm userForm) {
return "/users/form";
}
@PostMapping("")
public String postForm(@Valid UserForm userForm, BindingResult bindingResult) {
System.out.println(userForm + " " + bindingResult);
return "/users/form";
}
}
和百里香形式:
<form th:object="${userForm}" th:action="@{/users}" method="post">
<span th:each="err: ${#fields.errors('dateTime')}" th:text="${err}" style="background-color:red;color:white;"/>
<input type="text" th:field="*{dateTime}"/>
<input type="submit">
</form>
这个例子有什么问题?我应该如何修复它以使其正确解析 String 到 LocalDateTime ?
我也提交了example application here。
更新:
-
在“转换失败”下,我的意思是我遇到了异常:
org.springframework.core.convert.ConversionFailedException:无法从类型 [java.lang.String] 转换为类型 [@javax.validation.constraints.NotNull @org.springframework.format.annotation.DateTimeFormat java.time。 LocalDateTime] 为值 1990-01-01 10:10
使用小写字母
yyyy解决了这个问题。谢谢。
【问题讨论】:
-
定义“转换失败”。并使用正确的模式。 YYYY 是周年。你想要年份。年年。
标签: java spring validation spring-boot datetime-format