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]