@DateTimeFormat注解和@JsonFormat注解
之前一直使用的@DateTimeFormat注解和前端的时间格式转换的,今天偶然发现该注解失效了,所以查了一下,并测试发现了不同,记录下来:
先上总结:
1.使用param传递接收时间参数时,不管什么格式,后台必须使用@DateTimeFormat注解才可以接收;
2.使用body传递接收时间参数时,
后台默认接收“yyyy-MM-dd HH:mm:ss”格式的参数,并转换为date对象,
其他格式时需要使用@JsonFormat注解才可以接收;
测试如下:
1.使用param传递接收时间参数:
@RestController
@RequestMapping("/back/subsidy")
public class SubsidyManageController {
/**
* 测试
* @param dto
* @return
*/
@RequestMapping("/testSetTimeDto")
public RestRespon setestSetTimeDto(TestSetTimeDto dto) {
return RestResponse.success();
}
}
1.结果:失败
前端:传参格式:"yyyy-MM-dd"
后台:不添加注解,直接接收,
@Data
public class TestSetTimeDto implements Serializable {
private Date time;
}
2.结果:失败
前端:传参格式:"yyyy-MM-dd HH:mm:ss"
后台:不添加注解,直接接收,
@Data
public class TestSetTimeDto implements Serializable {
private Date time;
}
3.结果:成功
前端:传参格式:“yyyy-MM-dd”
后台:添加DateTimeFormat注解接收,
@Data
public class TestSetTimeDto implements Serializable {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date time;
}
2.使用body传递接收时间参数:
@RestController
@RequestMapping("/back/subsidy")
public class SubsidyManageController {
/**
* 测试
* @param dto
* @return
*/
@RequestMapping("/testSetTimeDto")
public RestRespon setestSetTimeDto(@RequestBody TestSetTimeDto dto) {
return RestResponse.success();
}
}
1.结果:失败
前端:传参格式:"yyyy-MM-dd"
后台:不添加注解,直接接收,
@Data
public class TestSetTimeDto implements Serializable {
private Date time;
}
2.结果:成功
前端:传参格式:"yyyy-MM-dd HH:mm:ss"
后台:不添加注解,直接接收,
@Data
public class TestSetTimeDto implements Serializable {
private Date time;
}
3.结果:成功
前端:传参格式:“yyyy-MM-dd”
后台:添加JsonFormat注解接收,
@Data
public class TestSetTimeDto implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date time;
}
总结:
1.使用param传递接收时间参数时,不管什么格式,后台必须使用@DateTimeFormat注解才可以接收;
2.使用body传递接收时间参数时,
后台默认接收“yyyy-MM-dd HH:mm:ss”格式的参数,并转换为date对象,
其他格式时需要使用@JsonFormat注解才可以接收;