首页 文章

Spring MVC GET @ModelAttribute带有时间戳的java.util.Date类型

提问于
浏览
2

我的 @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参数是作为GET字符串进入的

?endDate=1453784399000&startDate=1453698000000

没有被正确绑定,我收到此错误:

无法将类型为java.lang.String的属性值转换为属性endDate所需的类型java.util.Date;嵌套异常是org.springframework.core.convert.ConversionFailedException:无法从类型java.lang.String转换为类型@ org.springframework.format.annotation.DateTimeFormat java.util.Date,值为1453784399000;嵌套异常是java.lang.IllegalArgumentException:无法解析1453784399000

我需要编写什么样的转换器(或者更理想的是,问题字段上的 @DateTimeFormat )才能正确绑定?

我应该注意到我有另一个控制器设置完全相同,除了对象被注释 @RequestBody 而不是 @ModelAttribute 并且请求体是一个JSON对象,其中日期作为整数而不是字符串传递 .

1 回答

  • 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.
        // ...
    }
    

    我不知道我是否帮助你,但事实如此,这段代码可以适合你的 .

相关问题