修复:解决 Jackson2ObjectMapperBuilderCustomizer 配置不生效的问题,同时优化所有 Date 类型为对应 Java 8 日期、时间类型

This commit is contained in:
Charles7c 2022-12-29 21:48:50 +08:00
parent 0c9226a8ef
commit 1d21019813
11 changed files with 52 additions and 27 deletions

View File

@ -16,6 +16,8 @@
package top.charles7c.cnadmin.common.config;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
@ -23,6 +25,8 @@ import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.CacheControl;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@ -44,6 +48,7 @@ import top.charles7c.cnadmin.common.config.properties.CorsProperties;
public class WebMvcConfiguration implements WebMvcConfigurer {
private final CorsProperties corsProperties;
private final MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;
/**
* 静态资源处理器配置
@ -78,4 +83,20 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
/**
* 解决 Jackson2ObjectMapperBuilderCustomizer 配置不生效的问题
* <p>
* MappingJackson2HttpMessageConverter 对象在程序启动时创建了多个移除多余的保证只有一个
* </p>
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.removeIf(MappingJackson2HttpMessageConverter.class::isInstance);
if (Objects.isNull(mappingJackson2HttpMessageConverter)) {
converters.add(0, new MappingJackson2HttpMessageConverter());
} else {
converters.add(0, mappingJackson2HttpMessageConverter);
}
}
}

View File

@ -22,7 +22,6 @@ import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.TimeZone;
import lombok.extern.slf4j.Slf4j;
@ -60,11 +59,6 @@ public class JacksonConfiguration {
String timeFormatPattern = "HH:mm:ss";
return builder -> {
// 针对 java.util.Date 的转换
builder.locale(Locale.CHINA);
builder.timeZone(TimeZone.getDefault());
builder.simpleDateFormat(dateTimeFormatPattern);
// 针对 LongBigIntegerBigDecimal 的转换
JavaTimeModule javaTimeModule = new JavaTimeModule();
javaTimeModule.addSerializer(Long.class, BigNumberSerializer.SERIALIZER_INSTANCE);
@ -85,6 +79,7 @@ public class JacksonConfiguration {
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter));
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter));
builder.modules(javaTimeModule);
builder.timeZone(TimeZone.getDefault());
log.info(">>>初始化 Jackson 配置<<<");
};
}

View File

@ -16,7 +16,7 @@
package top.charles7c.cnadmin.common.config.mybatis;
import java.util.Date;
import java.time.LocalDateTime;
import org.apache.ibatis.reflection.MetaObject;
@ -59,7 +59,7 @@ public class MyBatisPlusMetaObjectHandler implements MetaObjectHandler {
}
Long createUser = LoginHelper.getUserId();
Date createTime = new Date();
LocalDateTime createTime = LocalDateTime.now();
if (metaObject.getOriginalObject() instanceof BaseEntity) {
// 继承了 BaseEntity 的类填充创建信息
BaseEntity baseEntity = (BaseEntity)metaObject.getOriginalObject();
@ -93,7 +93,7 @@ public class MyBatisPlusMetaObjectHandler implements MetaObjectHandler {
}
Long updateUser = LoginHelper.getUserId();
Date updateTime = new Date();
LocalDateTime updateTime = LocalDateTime.now();
if (metaObject.getOriginalObject() instanceof BaseEntity) {
// 继承了 BaseEntity 的类填充修改信息
BaseEntity baseEntity = (BaseEntity)metaObject.getOriginalObject();

View File

@ -17,6 +17,7 @@
package top.charles7c.cnadmin.common.model.dto;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.Data;
@ -32,7 +33,7 @@ public class LoginUser implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户 ID
* 用户ID
*/
private Long userId;
@ -75,4 +76,14 @@ public class LoginUser implements Serializable {
* 状态1启用 2禁用
*/
private Integer status;
/**
* 最后一次修改密码的时间
*/
private LocalDateTime pwdResetTime;
/**
* 创建时间
*/
private LocalDateTime createTime;
}

View File

@ -16,7 +16,7 @@
package top.charles7c.cnadmin.common.model.dto;
import java.util.Date;
import java.time.LocalDateTime;
import lombok.Data;
@ -37,7 +37,7 @@ public class OperationLog {
/**
* 操作时间
*/
private Date createTime;
private LocalDateTime createTime;
/**
* 异常

View File

@ -17,7 +17,7 @@
package top.charles7c.cnadmin.common.model.entity;
import java.io.Serializable;
import java.util.Date;
import java.time.LocalDateTime;
import lombok.Data;
@ -45,7 +45,7 @@ public class BaseEntity implements Serializable {
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
private LocalDateTime createTime;
/**
* 修改人
@ -57,5 +57,5 @@ public class BaseEntity implements Serializable {
* 修改时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
private LocalDateTime updateTime;
}

View File

@ -27,8 +27,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.http.HttpStatus;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 响应信息
*
@ -60,7 +58,6 @@ public class R<V extends Serializable> implements Serializable {
/** 时间戳 */
@Schema(description = "时间戳")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime timestamp = LocalDateTime.now();
/** 成功状态码 */

View File

@ -16,7 +16,7 @@
package top.charles7c.cnadmin.monitor.interceptor;
import java.util.Date;
import java.time.LocalDateTime;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@ -37,6 +37,7 @@ import org.springframework.web.util.ContentCachingResponseWrapper;
import org.springframework.web.util.WebUtils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
@ -104,7 +105,7 @@ public class LogInterceptor implements HandlerInterceptor {
private void logCreateTime() {
OperationLog operationLog = new OperationLog();
operationLog.setCreateUser(LoginHelper.getUserId());
operationLog.setCreateTime(new Date());
operationLog.setCreateTime(LocalDateTime.now());
LogContextHolder.set(operationLog);
}
@ -119,7 +120,7 @@ public class LogInterceptor implements HandlerInterceptor {
LogContextHolder.remove();
SysLog sysLog = new SysLog();
sysLog.setCreateTime(operationLog.getCreateTime());
sysLog.setElapsedTime(System.currentTimeMillis() - sysLog.getCreateTime().getTime());
sysLog.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(sysLog.getCreateTime()));
sysLog.setLogLevel(LogLevelEnum.INFO);
// 记录异常信息

View File

@ -17,7 +17,7 @@
package top.charles7c.cnadmin.monitor.model.entity;
import java.io.Serializable;
import java.util.Date;
import java.time.LocalDateTime;
import lombok.Data;
@ -122,5 +122,5 @@ public class SysLog implements Serializable {
/**
* 操作时间
*/
private Date createTime;
private LocalDateTime createTime;
}

View File

@ -16,7 +16,7 @@
package top.charles7c.cnadmin.system.model.entity;
import java.util.Date;
import java.time.LocalDateTime;
import lombok.Data;
@ -38,7 +38,7 @@ public class SysUser extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 用户 ID
* 用户ID
*/
@TableId
private Long userId;
@ -91,5 +91,5 @@ public class SysUser extends BaseEntity {
/**
* 最后一次修改密码的时间
*/
private Date pwdResetTime;
private LocalDateTime pwdResetTime;
}

View File

@ -173,7 +173,7 @@ spring:
jackson:
# 时区配置
time-zone: GMT+8
# 日期格式化
# 日期格式化(针对 java.util.Date
date-format: yyyy-MM-dd HH:mm:ss
# 序列化配置Bean -> JSON
serialization: