@DateTimeFormat注释在Spring Controller中不起作用

时间:2015-03-10 04:59:45

标签: spring-mvc spring-el

我正在关注Spring Documentation 4.通过其指南,我成功收集了格式正确的Date字段。 控制器类是

@Controller
public class HomeController{

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

MyForm类的字段日期使用 @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

中使用日期字段时
@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类中的字段而不是Controller中的字段。

1 个答案:

答案 0 :(得分:1)

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

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