@DateTimeFormat 注释在 Spring 控制器中不起作用

@DateTimeFormat annotation not working in Spring Controller

我正在关注 Spring 文档 4。根据其指南,我成功地收集了格式正确的日期字段。 控制器 Class 是

@Controller
public class HomeController{

    @RequestMapping("/home")
    public ModelAndView handleRequest(HttpServletRequest request,
                                      HttpServletResponse response) throws Exception {
    return new ModelAndView("page1", "myForm", new MyForm());
    }
}

MyForm Class 有一个字段 date@DateTimeFormat

注释
public class MyForm{

    @NumberFormat(style = Style.CURRENCY)
    private Double value = 50.00;

    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date date = new Date();

    @NumberFormat(style = Style.CURRENCY)
    public Double getValue() {
    return value;
   }

    @DateTimeFormat(pattern = "dd/MM/yyyy")
    public Date getDate() {
        return date;
    }
}

获取此 myForm 对象并评估格式正确 日期 字段值的JSP 代码是

<spring:eval expression="myForm.date"/>

至此一切都是正确的。但是当我尝试在 Spring Controller class

中使用 date 字段时
@Controller
public class HomeController {

    @DateTimeFormat(pattern = "dd/MM/yyyy")
    private Date date;

    @RequestMapping("/home")
    public ModelAndView handleRequest(HttpServletRequest request,
                                      HttpServletResponse response) throws Exception {
    date = new Date();
    return new ModelAndView("page1", "date", getDate());
    }
   @DateTimeFormat(pattern = "dd/MM/yyyy")
    public Date getDate() {
        return date;
    }

}

获取此 myForm 对象并计算格式不正确 日期 字段值的JSP 代码是

<spring:eval expression="date"/>

它仍然显示日期但不格式化。请解释为什么它格式化 MyForm Class 中的字段而不是 Controller 中的字段。

POJO MyForm 在提交表单时由 Spring 框架本身填充。 Spring 获取请求参数,转换为正确的格式并填充空 POJO 的字段,但如果您手动调用由 @DateTimeFormat 注释的方法,则它不会按预期工作。

您必须在控制器中使用 java SimpleDateFormat or joda DateTime