springmvc接口接收date类型为NULL时的处理

Java 发表评论


一、遇到的问题

先详细描述一下遇到的问题吧,在做一管理平台时,使用springmvc+mybatis+mybatis plus框架进行开发。
主要遇到2个问题:
1、在springmvc的controller接口中接收一个User对象,User对象中有一个属性‘离职日期’为date类型,数据库对应的是datetime类型,前端在更新(update)业务时,发现‘离职日期’为‘’时,无法传递参数,会抛出异常。
2、当做更新业务时,使用mybatis plus框架的UpdateWrapper进行更新时,前端传入的‘离职日期’为null时,更新不了。

二、解决办法

问题一

  1. 问题分析
    遇到这个问题时,先分析了一下,springmvc接收的user对象里面的‘离职日期’接收的期望类型是date类型,前端如果传递‘’,是string类型,接收类型和期望类型不符合,就会报接口错误。再一,string类型是‘’时,无法转换为date类型。
    通常会报以下错误:
default message [entryDate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'entryDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@com.baomidou.mybatisplus.annotation.TableField java.util.Date] for value ''; nested exception is java.lang.IllegalArgumentException
  1. 解决办法
    在controller里面加如下方法,即可解决。也是网上通用的方法。其它的有些不行。
    /**
     * 自定义方法绑定请求参数的Date类型
     *
     * @param request
     * @param binder
     * @throws Exception
     */
    @InitBinder
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        CustomDateEditor editor = new CustomDateEditor(df, true);//true表示允许为空,false反之
        binder.registerCustomEditor(Date.class, editor);
    }

问题二

  1. 问题分析
    这个主要是由于mybatis plus中的使用UpdateWrapper进行更新,调用更新方法时,发现‘离职日期’是null时,不会更新这个参数。
  2. 解决办法
    既然自带的updtae方法有问题,咱们就不用它了,等待作者修复。咱们自己在mapper文件写update的sql语句,然后写上service,在controller里面调用自己写的update方法,即可。

问题解决,虽然是个小问题,但还是花了半天时间。继续加油。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

昵称 *