From 1d21019813abd475a82e358b825778ed043db8a0 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Thu, 29 Dec 2022 21:48:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=20Jackson2ObjectMapperBuilderCustomizer=20=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=8C?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E4=BC=98=E5=8C=96=E6=89=80=E6=9C=89=20Date?= =?UTF-8?q?=20=E7=B1=BB=E5=9E=8B=E4=B8=BA=E5=AF=B9=E5=BA=94=20Java=208=20?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E3=80=81=E6=97=B6=E9=97=B4=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/config/WebMvcConfiguration.java | 21 +++++++++++++++++++ .../config/jackson/JacksonConfiguration.java | 7 +------ .../mybatis/MyBatisPlusMetaObjectHandler.java | 6 +++--- .../cnadmin/common/model/dto/LoginUser.java | 13 +++++++++++- .../common/model/dto/OperationLog.java | 4 ++-- .../common/model/entity/BaseEntity.java | 6 +++--- .../charles7c/cnadmin/common/model/vo/R.java | 3 --- .../monitor/interceptor/LogInterceptor.java | 7 ++++--- .../cnadmin/monitor/model/entity/SysLog.java | 4 ++-- .../cnadmin/system/model/entity/SysUser.java | 6 +++--- .../src/main/resources/application.yml | 2 +- 11 files changed, 52 insertions(+), 27 deletions(-) diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java index 49fb31e1..102c5746 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java @@ -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 配置不生效的问题 + *

+ * MappingJackson2HttpMessageConverter 对象在程序启动时创建了多个,移除多余的,保证只有一个 + *

+ */ + @Override + public void extendMessageConverters(List> converters) { + converters.removeIf(MappingJackson2HttpMessageConverter.class::isInstance); + if (Objects.isNull(mappingJackson2HttpMessageConverter)) { + converters.add(0, new MappingJackson2HttpMessageConverter()); + } else { + converters.add(0, mappingJackson2HttpMessageConverter); + } + } } diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java index 345d9aea..ab9f367d 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/jackson/JacksonConfiguration.java @@ -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); - // 针对 Long、BigInteger、BigDecimal 的转换 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 配置<<<"); }; } diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java index 7c7cd6bf..d4a2cd49 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/mybatis/MyBatisPlusMetaObjectHandler.java @@ -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(); diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java index 15e76fe0..37572428 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/LoginUser.java @@ -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; } diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/OperationLog.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/OperationLog.java index f0684bcd..1348024d 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/OperationLog.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/dto/OperationLog.java @@ -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; /** * 异常 diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/entity/BaseEntity.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/entity/BaseEntity.java index 40fbd4be..a5272e89 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/entity/BaseEntity.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/entity/BaseEntity.java @@ -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; } diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/R.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/R.java index 33664b46..17199de5 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/R.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/model/vo/R.java @@ -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 implements Serializable { /** 时间戳 */ @Schema(description = "时间戳") - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime timestamp = LocalDateTime.now(); /** 成功状态码 */ diff --git a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java index 1c24af50..2f276258 100644 --- a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java +++ b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/interceptor/LogInterceptor.java @@ -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); // 记录异常信息 diff --git a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/entity/SysLog.java b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/entity/SysLog.java index aa675efd..24945bd3 100644 --- a/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/entity/SysLog.java +++ b/continew-admin-monitor/src/main/java/top/charles7c/cnadmin/monitor/model/entity/SysLog.java @@ -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; } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java index 134266ab..4fea37d8 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/SysUser.java @@ -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; } diff --git a/continew-admin-webapi/src/main/resources/application.yml b/continew-admin-webapi/src/main/resources/application.yml index a80ef09c..f476200c 100644 --- a/continew-admin-webapi/src/main/resources/application.yml +++ b/continew-admin-webapi/src/main/resources/application.yml @@ -173,7 +173,7 @@ spring: jackson: # 时区配置 time-zone: GMT+8 - # 日期格式化 + # 日期格式化(针对 java.util.Date) date-format: yyyy-MM-dd HH:mm:ss # 序列化配置(Bean -> JSON) serialization: