【发布时间】:2016-01-28 19:42:10
【问题描述】:
在 Spring MVC 控制器中,我想从使用 @DateTimeFormat 的请求中解析 Date,并且在解析错误的情况下,我想在我的视图中显示一条错误消息,指示日期无效.
这是我的控制器方法:
@RequestMapping(method = RequestMethod.POST)
public String form(
@ModelAttribute
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date,
BindingResult result) {
if (result.hasErrors()) {
System.out.println(result.toString()); // (1)
}
System.out.println(date); // (2)
return "home";
}
我期待:
“Happy case”(用于date=1999-10-24):我希望(2) 打印日期。
“错误案例”(无法解析的日期):我希望(1) 打印有关解析失败的详细信息。
实际发生了什么:
“Happy case”(对于date=1999-10-24):(1) 打印拒绝值,(2) 打印正确解析的日期:
org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'date' on field 'date': rejected value [1999-10-24]; ...
Sun Oct 24 00:00:00 CEST 1999
“错误案例”:我在浏览器中看到400 Bad Request
Wed Oct 28 20:57:54 CET 2015
There was an unexpected error (type=Bad Request, status=400).
Failed to convert value of type 'java.lang.String' to required type 'java.util.Date';
我可以用 Spring Boot 1.2.7.RELEASE 重现这个。
示例链接:https://github.com/shaehnel/spring-mvc-date
我错过了什么?谢谢!
【问题讨论】:
-
尝试给模型属性起个名字;
...@ModelAttribute("date")... -
谢谢。我试过了,但没有任何区别。
-
这太奇怪了,我相信还有其他问题。您发布的代码确实是您测试过的代码,还是您为 stackoverflow 帖子修改了它们?
-
我已将示例应用程序移至 Github 以供所有人验证行为,并将链接添加到我的问题中。该示例是一个简单的 Spring 启动应用程序,我在其中添加了上面显示的控制器方法。我不知道在 Spring MVC 中配置了其他任何东西。
-
该问题可以通过 GitHub 上显示的示例重现。对于后一种“你好”的情况,似乎在docs.spring.io/spring-framework/docs/current/javadoc-api/org/… 可以采取行动之前发生了异常。对于第一种情况,即使转换实际上是成功的,也似乎对记录的内部异常进行了一些不正确的处理。
标签: spring date spring-mvc binding