RestFul风格的GET、POST请求到底应该如何接收日期类型
综上所述,结合开头说的,为了前后端交互,日期字段格式统一,可以使用1、2、4三个方案。首先是GET请求,在参数少的时候,没有必要使用对象接收,就可以直接使用1方案;反之GET请求参数较多,可以使用2方案;为了和GET请求的日期统一交互格式,只能采用方案4这里需要注意一点,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
。
更多推荐
所有评论(0)