修复:解决 Jackson2ObjectMapperBuilderCustomizer 配置不生效的问题,同时优化所有 Date 类型为对应 Java 8 日期、时间类型
This commit is contained in:
parent
0c9226a8ef
commit
1d21019813
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package top.charles7c.cnadmin.common.config;
|
package top.charles7c.cnadmin.common.config;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -23,6 +25,8 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.http.CacheControl;
|
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.CorsConfiguration;
|
||||||
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||||
import org.springframework.web.filter.CorsFilter;
|
import org.springframework.web.filter.CorsFilter;
|
||||||
@ -44,6 +48,7 @@ import top.charles7c.cnadmin.common.config.properties.CorsProperties;
|
|||||||
public class WebMvcConfiguration implements WebMvcConfigurer {
|
public class WebMvcConfiguration implements WebMvcConfigurer {
|
||||||
|
|
||||||
private final CorsProperties corsProperties;
|
private final CorsProperties corsProperties;
|
||||||
|
private final MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 静态资源处理器配置
|
* 静态资源处理器配置
|
||||||
@ -78,4 +83,20 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
|
|||||||
source.registerCorsConfiguration("/**", config);
|
source.registerCorsConfiguration("/**", config);
|
||||||
return new CorsFilter(source);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ import java.time.LocalDate;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -60,11 +59,6 @@ public class JacksonConfiguration {
|
|||||||
String timeFormatPattern = "HH:mm:ss";
|
String timeFormatPattern = "HH:mm:ss";
|
||||||
|
|
||||||
return builder -> {
|
return builder -> {
|
||||||
// 针对 java.util.Date 的转换
|
|
||||||
builder.locale(Locale.CHINA);
|
|
||||||
builder.timeZone(TimeZone.getDefault());
|
|
||||||
builder.simpleDateFormat(dateTimeFormatPattern);
|
|
||||||
|
|
||||||
// 针对 Long、BigInteger、BigDecimal 的转换
|
// 针对 Long、BigInteger、BigDecimal 的转换
|
||||||
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
JavaTimeModule javaTimeModule = new JavaTimeModule();
|
||||||
javaTimeModule.addSerializer(Long.class, BigNumberSerializer.SERIALIZER_INSTANCE);
|
javaTimeModule.addSerializer(Long.class, BigNumberSerializer.SERIALIZER_INSTANCE);
|
||||||
@ -85,6 +79,7 @@ public class JacksonConfiguration {
|
|||||||
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter));
|
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter));
|
||||||
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter));
|
javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter));
|
||||||
builder.modules(javaTimeModule);
|
builder.modules(javaTimeModule);
|
||||||
|
builder.timeZone(TimeZone.getDefault());
|
||||||
log.info(">>>初始化 Jackson 配置<<<");
|
log.info(">>>初始化 Jackson 配置<<<");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package top.charles7c.cnadmin.common.config.mybatis;
|
package top.charles7c.cnadmin.common.config.mybatis;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import org.apache.ibatis.reflection.MetaObject;
|
import org.apache.ibatis.reflection.MetaObject;
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ public class MyBatisPlusMetaObjectHandler implements MetaObjectHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Long createUser = LoginHelper.getUserId();
|
Long createUser = LoginHelper.getUserId();
|
||||||
Date createTime = new Date();
|
LocalDateTime createTime = LocalDateTime.now();
|
||||||
if (metaObject.getOriginalObject() instanceof BaseEntity) {
|
if (metaObject.getOriginalObject() instanceof BaseEntity) {
|
||||||
// 继承了 BaseEntity 的类,填充创建信息
|
// 继承了 BaseEntity 的类,填充创建信息
|
||||||
BaseEntity baseEntity = (BaseEntity)metaObject.getOriginalObject();
|
BaseEntity baseEntity = (BaseEntity)metaObject.getOriginalObject();
|
||||||
@ -93,7 +93,7 @@ public class MyBatisPlusMetaObjectHandler implements MetaObjectHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Long updateUser = LoginHelper.getUserId();
|
Long updateUser = LoginHelper.getUserId();
|
||||||
Date updateTime = new Date();
|
LocalDateTime updateTime = LocalDateTime.now();
|
||||||
if (metaObject.getOriginalObject() instanceof BaseEntity) {
|
if (metaObject.getOriginalObject() instanceof BaseEntity) {
|
||||||
// 继承了 BaseEntity 的类,填充修改信息
|
// 继承了 BaseEntity 的类,填充修改信息
|
||||||
BaseEntity baseEntity = (BaseEntity)metaObject.getOriginalObject();
|
BaseEntity baseEntity = (BaseEntity)metaObject.getOriginalObject();
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
package top.charles7c.cnadmin.common.model.dto;
|
package top.charles7c.cnadmin.common.model.dto;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -32,7 +33,7 @@ public class LoginUser implements Serializable {
|
|||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户 ID
|
* 用户ID
|
||||||
*/
|
*/
|
||||||
private Long userId;
|
private Long userId;
|
||||||
|
|
||||||
@ -75,4 +76,14 @@ public class LoginUser implements Serializable {
|
|||||||
* 状态(1启用 2禁用)
|
* 状态(1启用 2禁用)
|
||||||
*/
|
*/
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最后一次修改密码的时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime pwdResetTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime createTime;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package top.charles7c.cnadmin.common.model.dto;
|
package top.charles7c.cnadmin.common.model.dto;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ public class OperationLog {
|
|||||||
/**
|
/**
|
||||||
* 操作时间
|
* 操作时间
|
||||||
*/
|
*/
|
||||||
private Date createTime;
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异常
|
* 异常
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
package top.charles7c.cnadmin.common.model.entity;
|
package top.charles7c.cnadmin.common.model.entity;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ public class BaseEntity implements Serializable {
|
|||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT)
|
@TableField(fill = FieldFill.INSERT)
|
||||||
private Date createTime;
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改人
|
* 修改人
|
||||||
@ -57,5 +57,5 @@ public class BaseEntity implements Serializable {
|
|||||||
* 修改时间
|
* 修改时间
|
||||||
*/
|
*/
|
||||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
private Date updateTime;
|
private LocalDateTime updateTime;
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
|
|
||||||
import org.springframework.http.HttpStatus;
|
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 = "时间戳")
|
@Schema(description = "时间戳")
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
|
||||||
private LocalDateTime timestamp = LocalDateTime.now();
|
private LocalDateTime timestamp = LocalDateTime.now();
|
||||||
|
|
||||||
/** 成功状态码 */
|
/** 成功状态码 */
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package top.charles7c.cnadmin.monitor.interceptor;
|
package top.charles7c.cnadmin.monitor.interceptor;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
@ -37,6 +37,7 @@ import org.springframework.web.util.ContentCachingResponseWrapper;
|
|||||||
import org.springframework.web.util.WebUtils;
|
import org.springframework.web.util.WebUtils;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import cn.hutool.core.exceptions.ExceptionUtil;
|
import cn.hutool.core.exceptions.ExceptionUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.extra.servlet.ServletUtil;
|
import cn.hutool.extra.servlet.ServletUtil;
|
||||||
@ -104,7 +105,7 @@ public class LogInterceptor implements HandlerInterceptor {
|
|||||||
private void logCreateTime() {
|
private void logCreateTime() {
|
||||||
OperationLog operationLog = new OperationLog();
|
OperationLog operationLog = new OperationLog();
|
||||||
operationLog.setCreateUser(LoginHelper.getUserId());
|
operationLog.setCreateUser(LoginHelper.getUserId());
|
||||||
operationLog.setCreateTime(new Date());
|
operationLog.setCreateTime(LocalDateTime.now());
|
||||||
LogContextHolder.set(operationLog);
|
LogContextHolder.set(operationLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ public class LogInterceptor implements HandlerInterceptor {
|
|||||||
LogContextHolder.remove();
|
LogContextHolder.remove();
|
||||||
SysLog sysLog = new SysLog();
|
SysLog sysLog = new SysLog();
|
||||||
sysLog.setCreateTime(operationLog.getCreateTime());
|
sysLog.setCreateTime(operationLog.getCreateTime());
|
||||||
sysLog.setElapsedTime(System.currentTimeMillis() - sysLog.getCreateTime().getTime());
|
sysLog.setElapsedTime(System.currentTimeMillis() - LocalDateTimeUtil.toEpochMilli(sysLog.getCreateTime()));
|
||||||
sysLog.setLogLevel(LogLevelEnum.INFO);
|
sysLog.setLogLevel(LogLevelEnum.INFO);
|
||||||
|
|
||||||
// 记录异常信息
|
// 记录异常信息
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
package top.charles7c.cnadmin.monitor.model.entity;
|
package top.charles7c.cnadmin.monitor.model.entity;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -122,5 +122,5 @@ public class SysLog implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* 操作时间
|
* 操作时间
|
||||||
*/
|
*/
|
||||||
private Date createTime;
|
private LocalDateTime createTime;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package top.charles7c.cnadmin.system.model.entity;
|
package top.charles7c.cnadmin.system.model.entity;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ public class SysUser extends BaseEntity {
|
|||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户 ID
|
* 用户ID
|
||||||
*/
|
*/
|
||||||
@TableId
|
@TableId
|
||||||
private Long userId;
|
private Long userId;
|
||||||
@ -91,5 +91,5 @@ public class SysUser extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* 最后一次修改密码的时间
|
* 最后一次修改密码的时间
|
||||||
*/
|
*/
|
||||||
private Date pwdResetTime;
|
private LocalDateTime pwdResetTime;
|
||||||
}
|
}
|
||||||
|
@ -173,7 +173,7 @@ spring:
|
|||||||
jackson:
|
jackson:
|
||||||
# 时区配置
|
# 时区配置
|
||||||
time-zone: GMT+8
|
time-zone: GMT+8
|
||||||
# 日期格式化
|
# 日期格式化(针对 java.util.Date)
|
||||||
date-format: yyyy-MM-dd HH:mm:ss
|
date-format: yyyy-MM-dd HH:mm:ss
|
||||||
# 序列化配置(Bean -> JSON)
|
# 序列化配置(Bean -> JSON)
|
||||||
serialization:
|
serialization:
|
||||||
|
Loading…
Reference in New Issue
Block a user