Spring DateTimeFormat.ISO.Date预配置模式在语法上返回不正确

时间:2014-12-15 11:36:39

标签: spring spring-mvc

我正在尝试以以下格式在我的网址中传递日期:2014/12/12

所以我的网址看起来像是:

http://192.0.0.1/api/getdata?date=2014-12-12

我的控制器方法如下所示:

 public Iterable<Object> getObject(
        @RequestParam(value = "date", required = false) 
        @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date date) 

我收到了tomcat 错误

       <b>description</b>
            <u>The request sent by the client was syntactically incorrect.</u>

我想如果我使用的是预先配置的日期模式,解析日期就没有问题了吗?

The request sent by the client was syntactically incorrect using @DateTimeFormat

我看过上面类似的问题。但问题是使用未预先配置的MM / yy。我还需要自定义日期反序列化器吗?

2 个答案:

答案 0 :(得分:2)

Spring支持rest URL,因此您要传递的日期格式将分为3个部分。 使用此格式无法在URL中发送日期。您需要更改要传递的日期格式。

答案 1 :(得分:1)

格式yyyy / MM / dd是传递日期的错误格式,因为Sambhunath提到的原因。但是,如果您必须使用此格式,则应注册您的活页夹

@InitBinder
public void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
    dateFormat.setLenient(false);
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}

并从参数中删除@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)注释。

另一件事是,如果你想使用yyyy-MM-dd格式,你的问题不明确,在这种情况下你的代码很好,而你的问题就是你的请求中的错误。从

中删除&
http://192.0.0.1/api/getdata?&date=2014-12-12 

所以做到这一点

http://192.0.0.1/api/getdata?date=2014-12-12