RestFul风格的GET、POST请求到底应该如何接收日期类型


GET 请求如果参数直接通过@RequestParam接收日期,不能使用时间戳,只能用日期格式的字符串,使用@DateTimeFormat注解转换,如”yyyy-MM-dd HH:mm:ss”。POST 接收参数使用时间戳可以直接接收,如果使用字符串,就需要使用@JsonFormat注解进行转换。如果一个项目中有 GET 请求和 POST 请求,会出现有的请求用字符串,有的请求用时间戳,很不方便,为了统一,以下说说几种接收和转换日期的方式,超实用。

1. GET 请求,@RequestParam 接收字符串日期

@GetMapping("testDate")
public ResponseResult<?> testDate(@RequestParam("testDate")
                                  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date testDate) {
     log.info("接收的日期:" + testDate);
     return ResponseResult.success(testDate);
}

代码如上,需要使用@DateTimeFormat注解,使用pattern参数来指定转换的格式。

2. GET 请求,@ModelAttribute 接收字符串日期封装入对象

@GetMapping("testDate")
public ResponseResult<?> testDate(@ModelAttribute TestDateReqDTO reqDTO) {
    log.info("接收的日期:" + reqDTO);
    return ResponseResult.success(reqDTO);
}

@Data
public class TestDateReqDTO {
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date testDate;
}

通过TestDateReqDTO对象接收日期字段,这个时候同样需要使用@DateTimeFormat注解,使用pattern参数来指定转换的格式。这个时候虽然和 POST 请求类似,都是使用对象接收,但是无法实现时间戳自动转为日期。

3. POST 请求,@RequestBody 接收时间戳封装入对象

@PostMapping("testDate")
public ResponseResult<?> testDate(@RequestBody TestDateReqDTO reqDTO) {
    log.info("接收的日期:" + reqDTO);
    return ResponseResult.success(reqDTO);
}

@Data
public class TestDateReqDTO {
    private Date testDate;
}

请求传入的是时间戳(毫秒),直接用对象内的日期字段接收即可,无需额外手动添加注解去转换,直接就会自动转换为日期。这种虽然方便,但是不适用于 GET 请求,很难受。

4. POST 请求,@RequestBody 接收字符串日期封装入对象

@PostMapping("testDate")
public ResponseResult<?> testDate(@RequestBody TestDateReqDTO reqDTO) {
    log.info("接收的日期:" + reqDTO);
    return ResponseResult.success(reqDTO);
}

@Data
public class TestDateReqDTO {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date testDate;
}

请求传入的是时间格式字符串,需要使用@JsonFormat注解进行转换,将字符串转换为日期类型。

5. 总结

综上所述,结合开头说的,为了前后端交互,日期字段格式统一,可以使用 1、2、4 三个方案。

  • 首先是 GET 请求,在参数少的时候,没有必要使用对象接收,就可以直接使用 1 方案;
  • 反之 GET 请求参数较多,可以使用 2 方案;
  • 为了和 GET 请求的日期统一交互格式,只能采用方案 4

这里需要注意一点,GET 请求封装对象内的日期字段添加的注解是@DateTimeFormat,而 POST 请求使用的注解是@JsonFormat


文章作者: 程序猿洞晓
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 程序猿洞晓 !
评论
 上一篇
通过不同的方式实现多字段联合排序效果 通过不同的方式实现多字段联合排序效果
说到排序让你想起的是冒泡排序法、归并排序法、选择排序法等,但是这个是基础的排序方法,在实际的应用基本用不到,就算用到也是被包装到底层,无需自己的实现。下面就说几种在实际应用中使用到的排序方法。
2022-10-12
下一篇 
Spring事务失效的这10种坑,看看你踩中没!!! Spring事务失效的这10种坑,看看你踩中没!!!
对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了,spring事务大多数情况下,可以满足我们的业务需求,但是一不小心就会踩坑的哦。
2022-10-10
  目录