如何使spring-boot请求方法接受iso格式化的日期参数?

时间:2016-08-03 22:23:56

标签: spring spring-mvc datetime spring-boot isodate

我尝试编写一个控制器请求方法,该方法接受以iso格式的日期时间字符串形式发送的日期参数。 It looks like you can specify a format manually,使用@DateTimeFormat(pattern="yyyy-MM-dd")注释方法参数,但我想使用iso  设置。即@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)。使用ISO Date Time格式我甚至无法解析文档中的示例日期。我想知道我是否做错了什么。

这是我的控制器类:

@RestController
public class DateController {

    @RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET)
    public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Date date){
        return new ResponseEntity<>(date.toString(), HttpStatus.OK);
    }

    @RequestMapping(path = "/echoDumbDate", method = RequestMethod.GET)
    public ResponseEntity<String> echoDumbDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date){
        return new ResponseEntity<>(date.toString(), HttpStatus.OK);
    }
}

当我尝试使用我实际想要解析的日期来调用此控制器时,它不起作用:

http://localhost:8080/echoIsoDate?date=2015-12-30T00:00:00.000Z

当我尝试拨打此控制器with the example date from the documentation时,它无法正常工作:

http://localhost:8080/echoIsoDate?date=2000-10-31%2001:30:00.000-05:00

第二种控制器方法确实有效。例如,调用http://localhost:8080/echoDumbDate?date=1970-01-01会返回Thu Jan 01 00:00:00 CST 1970(但接下来它在CST中,可能是在我的系统时区)。

问题:

  • 我在echoIsoDate()做错了什么?或者Spring中有错误吗?
  • 对于echoDumbDate(),有没有办法指定我想要的时区,以便它始终使用UTC?

1 个答案:

答案 0 :(得分:1)

试试这个

@RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET)
public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") Date date){
    return new ResponseEntity<>(date.toString(), HttpStatus.OK);
}