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注解进行转换,将字符串转换为日期类型。

总结

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

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

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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿洞晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值