基于SpringBoot项目遇到的坑--Date入参问题

 更新时间:2021年10月25日 10:51:22   作者:杀猪了  
这篇文章主要介绍了SpringBoot项目遇到的坑--Date入参问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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然后赋值

   class Test{
		private Date time;
		private Long timeLong;
   }
   
   @PostMapping("/test")
   public Test test(@RequestBody Test test){
       test.setTime(new Date(test.getTimeLone()));
       return test;
   }

2.后台返回的json数据

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

在这里插入图片描述

原因分析:

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

解决方案:

全局配置

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

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

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

在这里插入图片描述

springboot接口入参的一些问题

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

入参绑定

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

在这里插入图片描述

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

/**
     * 在controller层中加入一段数据绑定代码
     * @param webDataBinder
     */
    @InitBinder
    public void initBinder(WebDataBinder webDataBinder) throws Exception{
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        simpleDateFormat.setLenient(false);
        webDataBinder.registerCustomEditor(Date.class , new CustomDateEditor(simpleDateFormat , true));
    }

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

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

 public class DateConverter implements Converter<String,Date> {
     private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
     @Override
     public Date convert(String s) {
         if ("".equals(s) || s == null) {
            return null;
         }
         try {
            return simpleDateFormat.parse(s);
         } catch (ParseException e) {
             e.printStackTrace();
         }
         return null;
     }
 }

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

@Configuration
public class WebConfigBeans {
    @Autowired
    private RequestMappingHandlerAdapter handlerAdapter;
    /**
     * 增加字符串转日期的功能
     */
    @PostConstruct
    public void initEditableAvlidation() {
        ConfigurableWebBindingInitializer initializer = (ConfigurableWebBindingInitializer)handlerAdapter.getWebBindingInitializer();
        if(initializer.getConversionService()!=null) {
            GenericConversionService genericConversionService = (GenericConversionService)initializer.getConversionService();           
            genericConversionService.addConverter(new StringToDateConverter());
        }
    }
}

入参错误全局异常处理

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

@RestControllerAdvice
public class ControllerAdvice  {
@ExceptionHandler(value = {org.springframework.validation.BindException.class})
    public BaseResp dealDateFarmatException(Throwable exception) {
        BaseResp resp = new BaseResp();
        resp.setCode("400");
        resp.setStatus(false);
        resp.setMsg("参数类型错误");
        return resp;
    }
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java8中方便又实用的Map函数总结

    Java8中方便又实用的Map函数总结

    java8之后,常用的Map接口中添加了一些非常实用的函数,可以大大简化一些特定场景的代码编写,提升代码可读性,快跟随小编一起来看看吧
    2022-11-11
  • mybatis 多表关联mapper文件写法操作

    mybatis 多表关联mapper文件写法操作

    这篇文章主要介绍了mybatis 多表关联mapper文件写法操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Spring集成事务代码实例

    Spring集成事务代码实例

    这篇文章主要介绍了Spring集成事务代码实例,pring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交,需要的朋友可以参考下
    2023-10-10
  • Java序列化反序列化原理及漏洞解决方案

    Java序列化反序列化原理及漏洞解决方案

    这篇文章主要介绍了Java序列化反序列化原理及漏洞解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Transactional注解导致Spring Bean定时任务失效的解决方法

    Transactional注解导致Spring Bean定时任务失效的解决方法

    这篇文章主要介绍了Transactional注解导致Spring Bean定时任务失效的解决方法,文中通过代码示例介绍的非常详细,对大家解决问题有一定的帮助,需要的朋友可以参考下
    2024-10-10
  • Java Condition条件变量提高线程通信效率

    Java Condition条件变量提高线程通信效率

    这篇文章主要介绍了Java Condition条件变量提高线程通信效率,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 详解Spring @Autowired 注入小技巧

    详解Spring @Autowired 注入小技巧

    这篇文章主要介绍了详解Spring @Autowired 注入小技巧,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Java 数据交换 Json 和 异步请求 Ajax详解

    Java 数据交换 Json 和 异步请求 Ajax详解

    Json(JavaScript Object Notation)是一种轻量级的数据交换格式,采用键值对的形式来表示数据,它广泛应用于Web开发中,特别适合于前后端数据传输和存储,这篇文章主要介绍了Java数据交换Json和异步请求Ajax,需要的朋友可以参考下
    2023-09-09
  • MyBatis接口绑定的实现方式和工作原理

    MyBatis接口绑定的实现方式和工作原理

    在日常开发中,数据持久层是几乎每个项目都会涉及的一个关键组成部分,MyBatis作为一个流行的持久层框架,其提供的接口绑定机制极大地简化了数据库操作,本文将通过详细的代码示例和讲解,带你深入理解MyBatis接口绑定的工作原理和实践方式,需要的朋友可以参考下
    2024-03-03
  • mybatis plus实现条件查询

    mybatis plus实现条件查询

    这篇文章主要为大家介绍了mybatis plus实现条件查询,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论