我有@RestController
看起来像这样:
@RestController
public class EventSearchController {
@RequestMapping(value = "/api/eventSearch", method = RequestMethod.GET)
public List<EventDTO> eventSearch(@Valid
@ModelAttribute
EventSearchCommand eventSearchCommand) {
// ...
}
}
我的EventSearchCommand
看起来像这样:
@Data
public class EventSearchCommand {
// other fields that are not a problem here...
private Date startDate;
private Date endDate;
}
@Data
来自Project Lombok。我遇到的问题是startDate和endDate参数是作为
?endDate=1453784399000&startDate=1453698000000
没有正确绑定,我收到此错误:
无法将java.lang.String类型的属性值转换为必需值 输入属性endDate的java.util.Date;嵌套异常是 org.springframework.core.convert.ConversionFailedException:失败 从类型java.lang.String转换为type @ org.springframework.format.annotation.DateTimeFormat java.util.Date 值1453784399000;嵌套异常是 java.lang.IllegalArgumentException:无法解析1453784399000
我需要编写什么样的转换器(或者更理想的是问题字段上的@DateTimeFormat
)才能正确绑定?
我应该注意到我有另一个控制器设置完全相同,除了对象被注释@RequestBody
而不是@ModelAttribute
,请求体是一个JSON对象,其中日期作为整数传入而不是字符串。
答案 0 :(得分:2)
好吧,我在一个软件项目上工作,我收到一些参数(来自GET请求),其中两个是时间戳。我只是使用类似的东西:
public ModelAndView method(@ModelAttribute("it") Long it, @ModelAttribute("ft") Long ft /* some parameters that it doesn't matter here */) {
java.util.Date initialDate = new java.util.Date(it); //create a java.util.Date from a long representing timestamp.
// ...
}
我不知道我是否帮助你,但事实如此,这段代码可以适合你的。