如何解决SpringBoot Date入参问题(date,springboot,开发技术)

时间:2024-05-08 21:32:33 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

SpringBoot Date入参问题

springboot项目遇到的坑-----使用@ResponseBody @RequestBody,对象Date 类型入参,返回json格式化

1.传输中的Date类型时间不准确

时区会有8个小时偏差

原因分析

而SpringBoot默认的是Jackson框架转换,而Jackson默认的时间时区是GMT,对于中国时间少8个小时

解决方案

在传输的Date属性字段上加此注解

@JsonFormat(timezone=“GMT+8”,pattern=“yyyy-MM-dd”)

在传输实体类中定义一个Long型成员变量存储时间戳 传输过程中只传时间戳 后台将其进行转换为Date然后赋值

classTest{ privateDatetime; privateLongtimeLong;}@PostMapping("/test")publicTesttest(@RequestBodyTesttest){test.setTime(newDate(test.getTimeLone()));returntest;}

2.后台返回的json数据

其中Date类型接收会自动转换成Long类型的时间戳

如何解决SpringBoot Date入参问题

原因分析:

springboot1.x版本默认的json处理是jackson 会将date字段返回时间戳

解决方案:

全局配置

spring:jackson:time-zone:GMT+8date-format:yyyy-MM-ddHH:mm:ss

如果个别实体需要使用其他格式的 pattern,在实体上加入注解即可

@JsonFormat(timezone=“GMT+8”,pattern=“yyyy-MM-dd”)privateDatetime;

如何解决SpringBoot Date入参问题

springboot接口入参的一些问题

最近在工作中遇到一个接口入参类型转换错误未被处理的问题,于是整理了一些关于springmvc入参的问题

入参绑定

1、入参中我们最常见的是date类型的参数转换,这个可以通过注解来实现参数类型的转换,只需在bean对象的属性上方添加注解@DateTimeFormat(pattern=“yyyy-MM-dd”),pattern为时间对象的格式化

如何解决SpringBoot Date入参问题

2、在controller类里定义数据绑定类

/***在controller层中加入一段数据绑定代码*@paramwebDataBinder*/@InitBinderpublicvoidinitBinder(WebDataBinderwebDataBinder)throwsException{SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-dd");simpleDateFormat.setLenient(false);webDataBinder.registerCustomEditor(Date.class,newCustomDateEditor(simpleDateFormat,true));}

3、定义全局的参数类型转换器

首先建立一个实现Converter的转换器

publicclassDateConverterimplementsConverter<String,Date>{privateSimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");@OverridepublicDateconvert(Strings){if("".equals(s)||s==null){returnnull;}try{returnsimpleDateFormat.parse(s);}catch(ParseExceptione){e.printStackTrace();}returnnull;}}

然后将该参数转换器绑定到springmvc的配置中

@ConfigurationpublicclassWebConfigBeans{@AutowiredprivateRequestMappingHandlerAdapterhandlerAdapter;/***增加字符串转日期的功能*/@PostConstructpublicvoidinitEditableAvlidation(){ConfigurableWebBindingInitializerinitializer=(ConfigurableWebBindingInitializer)handlerAdapter.getWebBindingInitializer();if(initializer.getConversionService()!=null){GenericConversionServicegenericConversionService=(GenericConversionService)initializer.getConversionService();genericConversionService.addConverter(newStringToDateConverter());}}}

入参错误全局异常处理

在springmvc的模型中,若参数转换出现异常,会直接跳转到默认的错误400页面,如果我们做的为接口,需返回一个代表错误的json对象时,我们可以使用一个全局的异常处理类,类上添加注解@RestControllerAdvice使得异常处理后返回rest风格的对象,使用@ControllerAdvice返回页面

@RestControllerAdvicepublicclassControllerAdvice{@ExceptionHandler(value={org.springframework.validation.BindException.class})publicBaseRespdealDateFarmatException(Throwableexception){BaseRespresp=newBaseResp();resp.setCode("400");resp.setStatus(false);resp.setMsg("参数类型错误");returnresp;}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何解决SpringBoot Date入参问题的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何解决偶现的MissingServletRequestParameterException异常问题下一篇:

2 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18