springboot+mybatis(mybatis plus)日期相关问题

1.增加或修改时自动填充时间

写一个MyMetaObjectHandler类实现MetaObjectHandler接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * 在增加的时候响应相关操作
     * @param metaObject
     */
    @Override
    public void insertFill(org.apache.ibatis.reflection.MetaObject metaObject) {
        setFieldValByName("createTime",new Date(),metaObject);
        setFieldValByName("updateTime",new Date(),metaObject);
    }
    /**
     * 在修改的时候响应相关操作
     * @param metaObject
     */
    @Override
    public void updateFill(org.apache.ibatis.reflection.MetaObject metaObject) {
        setFieldValByName("updateTime",new Date(),metaObject);
    }
}

在实体类中添加相应的注解,在进行添加和修改操作时,时间就可以自动添加

@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

2.时间出参格式化

yml文件进行配置

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

3.时间入参格式化

新建全局日期类型控制器,通过 @ControllerAdvice和@InitBinder注解进行全局入参处理

@ControllerAdvice
public class InitBinderDateController {
    /**
     * 将前台传递过来的日期格式的字符串,自动转化为时间类型
     * 拦截不到@RequestBody注解修饰的参数
     */
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        //java.util.Date类型格式化
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
        //java.time.LocalDateTime类型格式化
        binder.registerCustomEditor(LocalDateTime.class, new PropertyEditorSupport()
        {
            @Override
            public void setAsText(String text)
            {
                if(!StringUtils.isEmpty(text)){
                    setValue(LocalDateTime.parse(text, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
                }
            }
        });
    }
}

我再没有使用这个类的时候,控制台打印了一下错误信息。

org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException(AbstractHandlerExceptionResolver.java:197) - Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type java.lang.String to required type java.util.Date; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value 2021-09-09 11:36:34; nested exception is java.lang.IllegalArgumentException]


​
经验分享 程序员 微信小程序 职场和发展