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]
