一、遇到的问题
先详细描述一下遇到的问题吧,在做一管理平台时,使用springmvc+mybatis+mybatis plus框架进行开发。
主要遇到2个问题:
1、在springmvc的controller接口中接收一个User对象,User对象中有一个属性‘离职日期’为date类型,数据库对应的是datetime类型,前端在更新(update)业务时,发现‘离职日期’为‘’时,无法传递参数,会抛出异常。
2、当做更新业务时,使用mybatis plus框架的UpdateWrapper进行更新时,前端传入的‘离职日期’为null时,更新不了。
二、解决办法
问题一
- 问题分析
遇到这个问题时,先分析了一下,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
- 解决办法
在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);
}
问题二
- 问题分析
这个主要是由于mybatis plus中的使用UpdateWrapper进行更新,调用更新方法时,发现‘离职日期’是null时,不会更新这个参数。 - 解决办法
既然自带的updtae方法有问题,咱们就不用它了,等待作者修复。咱们自己在mapper文件写update的sql语句,然后写上service,在controller里面调用自己写的update方法,即可。
问题解决,虽然是个小问题,但还是花了半天时间。继续加油。