Spring boot 项目中post 提交Date数据时出现type=Bad Request, status=400状态码

1、问题描述

在一次项目的某个页面中遇到了,当客户端提交数据时出现(type=Bad Request, status=400)返回400状态码,控制台出现 WARN .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors。

Spring boot 项目中post 提交Date数据时出现type=Bad Request, status=400状态码_第1张图片
服务器控制台

2、问题原因

经过测试发现,当客户端页面提交日期为空时会出现以下异常,如果提交日期不为空则不会出现上述问题。出现这种错误的原因是没有对代码中的Date型参数进行格式化,接收为null的日期类型参数时,出现了转换异常。一般是页面的数据与数据库的Date数据类型不同导致的。

3、解决方法

为后台用于接收日期类型并存入数据库的属性进行日期的格式化。

1、为该属性加上格式化注解:@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)(数据库中的日期格式)

如果接收日期的为实体类属性则直接在该属性上加,如果为方法参数直接加在方法参数前。

Spring boot 项目中post 提交Date数据时出现type=Bad Request, status=400状态码_第2张图片

2、使用日期类型转换器,定义一个日期类型转换器将他交给spring容器管理,在转换时会自动调用。使用时实现Converter接口接口中泛型第一个参数为源类型第二个参数为目标类型。

@Component
public class StringToDateConvert implements Converter<String, Date> {
   // 日期转换器
   private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
   @Override
   public Date convert(String s) {
       Date date = null;
       try {
          if(s!=null && !"".equals(s)){
              date = format.parse(s);
          }
       } catch (ParseException e) {
           e.printStackTrace();
      }
       return date;
   }
}

你可能感兴趣的:(技术分享)