Get请求如何获取Date类型的参数
背景介绍
今天Code Review的时候发现一个小问题,发现部分接口(Get)接收前端传递的时间类型用的是String类型的然后再到代码中转换成Date类型.
我提出我的疑惑:“嘿、boy 这地方为啥要用String 接收开始时间和结束时间?”
boyA:“不用String 直接用Date会报错啊!难道你们不用String?”
boyB一脸懵逼加略带嘲讽回到:“怎么可能报错?我这边都直接用Date接收的,你看…”,熟练的打开项目
boyA看完后回复:“你这不对啊,查询接口用Post?不符合rest风格啊!要用get、get、get!”
boyB…装逼失败反被艹。
首先我们来看看直接使用Date类型接收Get请求中的会发生什么
下面是请求与后台的报错日志
@GetMapping("/v1/date/test_a")
@ApiOperation(value = "/v1/date/test_a" , notes = "错误案例")
@ApiImplicitParam(paramType = "query",name = "startTime", value = "时间[yyyy-MM-dd HH:mm:ss]", dataType = "Date",defaultValue = "2019-03-14 14:00:00")
public Response<Date> dateA(@RequestParam("startTime") Date startTime){
return ResponseUtil.getSuccessResponse(startTime);
}
@DateTimeFormat
好了本篇博客主角上场,使用方法:
@DateTimeFormat(pattern = “yyyy-MM-dd”)
@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
指定前端传递的格式即可
代码demo:
@GetMapping("/v1/date/test_b")
@ApiOperation(value = "/v1/date/test_b" , notes = "成功案例 Date [yyyy-MM-dd]")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "startDate", value = "时间[yyyy-MM-dd]", dataType = "Date", defaultValue = "2019-03-14"),
@ApiImplicitParam(paramType = "query", name = "endDate", value = "时间[yyyy-MM-dd]", dataType = "Date", defaultValue = "2019-03-15")
})
public Response<String[]> dateB(@RequestParam("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
@RequestParam("endDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) Date endDate){
return ResponseUtil.getSuccessResponse(new String[]{DateUtils.parseDate(startDate,DateUtils.YYYY_MM_DD),DateUtils.parseDate(endDate,DateUtils.YYYY_MM_DD)});
}
@GetMapping("/v1/date/test_c")
@ApiOperation(value = "/v1/date/test_c" , notes = "成功案例 DateTime [yyyy-MM-dd HH:mm:ss]")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", name = "startDate", value = "时间[yyyy-MM-dd HH:mm:ss]", dataType = "Date", defaultValue = "2019-03-14 14:00:00"),
@ApiImplicitParam(paramType = "query", name = "endDate", value = "时间[yyyy-MM-dd HH:mm:ss]", dataType = "Date", defaultValue = "2019-03-15 14:00:00")
})
public Response<String[]> dateC(@RequestParam("startDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date startDate,
@RequestParam("endDate") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Date endDate){
return ResponseUtil.getSuccessResponse(new String[]{DateUtils.parseDate(startDate,"yyyy-MM-dd HH:mm:ss"),DateUtils.parseDate(endDate,"yyyy-MM-dd HH:mm:ss")});
}
@DateTimeFormat注解也可以直接写在实体类对象中的成员变量上。
最后boyA and boyB手牵手携手共进