时间的格式有很多种,比较常用的有时间戳格式、UTC时间格式、标准时间格式等,而且时间参数出现的位置可能在URL上,可能在Body中,也可能在Header中,我们创建一个简单的接口,想通过@PathVariable
接收Date类型的时间参数,和通过@RequestParam
接收LocalDateTime类型的时间参数,并且想通过@RequestBody
来接收JSON中的时间参数:
SpringBoot默认是用String接收的,如果直接用LocalDateTime或者Date来接收会报一个类型转换错误。
当然我们可以使用String接收,再手动转成对应的时间格式,但是不够优雅,接下来我们看看不同级别是如何处理时间字段的。
青铜解决方案
青铜解析方案存在的问题:
@InitBinder
作用域只是当前的Controller,如果我用100个Controller难道我要写100个@InitBinder
@JsonFormat
也是每个字段上都要增加个注解,而且只能支持一种时间格式,如果我们还要支持时间戳格式就没法做到了。
白银解决方案
针对青铜解析方案存在的问题1,我们的解决方案是使用@ControllerAdvice
,这样就不用在每个Controller上都添加@InitBinder
了
王者解决方案
最后说一句(求关注!别白嫖!)
如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、转发、在看。
关注公众号:woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!