当前位置: 首页 > 后端技术 > Java

关于SpringBoot使用实体接收GET请求,时间参数转换报错

时间:2023-04-01 15:28:23 Java

笔者所在公司的框架采用的是前后端分离的方式。原前端接收到前端的GET查询请求,使用@RequestParamMapparams接收,如下:@ApiOperation("分页查询数据变化记录")@GetMapping("/list")publicResult>list(@ApiParam("请求参数")@RequestParamMapparams){当前改为@ApiOperation("分页查询数据变更记录")@GetMapping("/list")publicResult>list(@ApiParam("requestparameters")DataRevisiondataRevision){发起事务测试,发现除了时间类型的字段转换,都会报错,并且其他类型的SpringBoot可以正常转换,请求地址:http://localhost:8088/data-re...错误信息:org.springframework.validation.BeanPropertyBindingResult:1errors\nFielderrorinobject'dataRevision'onfield'startDate':拒绝值[2022-05-13T00:00:0008:00];代码[typeMismatch.dataRevision.startDate,typeMismatch.startDate,typeMismatch.java.util.Date,typeMismatch];参数[org.springframework.context.support.DefaultMessageSourceResolvable:codes[dataRevision.开始日期,开始日期];argu注释[];默认消息[开始日期]];默认消息[无法将类型为“java.lang.String”的属性值转换为属性“startDate”所需的类型“java.util.Date”;嵌套异常是org.springframework.core.convert.ConversionFailedException:无法从类型[java.lang.String]转换为类型[@com.baomidou.mybatisplus.annotation.TableFieldjava.util.Date]的值'2022-05-13T00:00:0008:00';nestedexceptionisjava.lang.IllegalArgumentException]故障分析,2022-05-13T00:00:00+08:00转java.util.Date类型时出现异常。通过查网上的相关资料,需要全局拦截Controller请求,从而实现对绑定变量的取值处理:importcn.hutool.core.date.DateUtil;@Slf4j@ControllerAdvice@RefreshScopepublicclassGlobalControllerAdvice{@InitBinderpublicvoidinitBinder(WebDataBinderbinder){binder.registerCustomEditor(Date.class,newPropertyEditorSupport(){@OverridepublicvoidsetAsText(Stringtext)throwsIllegalArgumentException{try{//格式化前端发送的时间格式化,如:2022-05-13T00:00:0008:00格式化为2022-05-13T00:00:00+08:00StringrealText=text.replace("","+");setValue(DateUtil.parseUTC(realText));}catch(Exceptione){log.error("绑定变量转换值异常:"+e.getMessage(),e);设置值(DateUtil.parse(文本));}}});}