Pao*_*f76 8 java rest json spring-mvc
我不能让这个工作:
@RequestMapping(value = "/people", method = RequestMethod.GET, produces = "application/json")
public @ResponseBody
List<IPerson> searchPerson(@RequestParam(value = "birthDay", required = false) @DateTimeFormat(pattern="yyyy-MM-dd") Date birthDay) {
Run Code Online (Sandbox Code Playgroud)
随请求:
http://localhost:8080/rest/people?birthDay=2014-05-25
Run Code Online (Sandbox Code Playgroud)
错误总是:
"HTTP状态400 - 客户端发送的请求在语法上不正确".
我找不到任何资源能给我一个明确的答案/指南来理解潜在的问题......有人可以帮助我吗?谢谢!
编辑: 例外是:
Caused by: org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.util.Date for value '2010-10-10'; nested exception is java.lang.IllegalArgumentException
at org.springframework.core.convert.support.ObjectToObjectConverter.convert(ObjectToObjectConverter.java:78)
at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:35)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:168)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:161)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:93)
at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:61)
... 40 more
Caused by: java.lang.IllegalArgumentException
at java.util.Date.parse(Date.java:615)
at java.util.Date.<init>(Date.java:272)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.springframework.core.convert.support.ObjectToObjectConverter.convert(ObjectToObjectConverter.java:73)
... 45 more
Run Code Online (Sandbox Code Playgroud)
最后我找到了解决方案,也许对其他有同样问题的人有用。只需将此方法添加到控制器即可:
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
Run Code Online (Sandbox Code Playgroud)
但仍然不明白为什么 @DateTimeFormat(pattern="yyyy-MM-dd") 不起作用...使用这个解决方案不需要 DateTimeFormat,所以我像其他人一样注释了参数:
@RequestParam(required = false) Date birthDay
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13289 次 |
最近记录: |