> converters) {
- MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
- ObjectMapper objectMapper = new ObjectMapper();
-
- // 注册 JavaTimeModule(替代手动注册 LocalDateTimeSerializer)
- JavaTimeModule javaTimeModule = new JavaTimeModule();
- // 返回指定字符串格式
- javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DATE_TIME_FORMATTER));
- // 反序列化,接受前端传来的格式
- javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DATE_TIME_FORMATTER));
- objectMapper.registerModule(javaTimeModule);
+ public void configureMessageConverters(HttpMessageConverters.ServerBuilder converterBuilder) {
+ JsonMapper.Builder builder = JsonMapper.builder();
// 配置全局日期格式和时区
- objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
- objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
+ builder.disable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS);
+ builder.defaultDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
+ builder.defaultTimeZone(TimeZone.getTimeZone("GMT+8"));
// 处理 Long/BigInteger 的精度问题
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
- objectMapper.registerModule(simpleModule);
+ builder.addModule(simpleModule);
- jackson2HttpMessageConverter.setObjectMapper(objectMapper);
- converters.add(1, jackson2HttpMessageConverter);
+ converterBuilder.addCustomConverter(new JacksonJsonHttpMessageConverter(builder));
}
/**
diff --git a/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java b/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java
index 9b20ddb9..26f39f7f 100644
--- a/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java
+++ b/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java
@@ -1,7 +1,7 @@
package com.youlai.boot.core.exception;
import cn.hutool.core.util.StrUtil;
-import com.fasterxml.jackson.core.JsonProcessingException;
+import tools.jackson.core.JacksonException;
import com.youlai.boot.core.web.Result;
import com.youlai.boot.core.web.ResultCode;
import jakarta.servlet.ServletException;
@@ -143,11 +143,11 @@ public class GlobalExceptionHandler {
/**
* 处理 JSON 处理异常
*
- * 当处理 JSON 数据时发生错误,会抛出 JsonProcessingException 异常。
+ * 当处理 JSON 数据时发生错误,会抛出 JacksonException 异常。
*/
- @ExceptionHandler(JsonProcessingException.class)
+ @ExceptionHandler(JacksonException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
- public Result handleJsonProcessingException(JsonProcessingException e) {
+ public Result handleJacksonException(JacksonException e) {
log.error("Json转换异常,异常原因:{}", e.getMessage(), e);
return Result.failed(e.getMessage());
}
diff --git a/src/main/java/com/youlai/boot/platform/websocket/publisher/WebSocketPublisher.java b/src/main/java/com/youlai/boot/platform/websocket/publisher/WebSocketPublisher.java
index d6d04b7d..7d5f4d36 100644
--- a/src/main/java/com/youlai/boot/platform/websocket/publisher/WebSocketPublisher.java
+++ b/src/main/java/com/youlai/boot/platform/websocket/publisher/WebSocketPublisher.java
@@ -1,12 +1,12 @@
package com.youlai.boot.platform.websocket.publisher;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Service;
+import tools.jackson.core.JacksonException;
+import tools.jackson.databind.ObjectMapper;
@Service
@RequiredArgsConstructor
@@ -49,7 +49,7 @@ public class WebSocketPublisher {
}
}
- private Object serializeIfNeeded(Object payload) throws JsonProcessingException {
+ private Object serializeIfNeeded(Object payload) throws JacksonException {
if (payload == null) {
return null;
}
diff --git a/src/main/java/com/youlai/boot/platform/websocket/service/impl/WebSocketServiceImpl.java b/src/main/java/com/youlai/boot/platform/websocket/service/impl/WebSocketServiceImpl.java
index 3ac76600..46744240 100644
--- a/src/main/java/com/youlai/boot/platform/websocket/service/impl/WebSocketServiceImpl.java
+++ b/src/main/java/com/youlai/boot/platform/websocket/service/impl/WebSocketServiceImpl.java
@@ -13,7 +13,7 @@ import java.util.List;
/**
* WebSocket 服务实现类
- *
+ *
* 核心功能:
* - 用户在线状态管理(支持多设备登录)
* - 消息推送(广播、点对点)
@@ -145,7 +145,7 @@ public class WebSocketServiceImpl implements WebSocketService {
/**
* 手动触发在线用户数量广播
- *
+ *
* 供外部服务(如定时任务)调用
*/
public void notifyOnlineUsersChange() {
diff --git a/src/main/java/com/youlai/boot/security/filter/CaptchaValidationFilter.java b/src/main/java/com/youlai/boot/security/filter/CaptchaValidationFilter.java
index dc2137a8..0b4c7289 100644
--- a/src/main/java/com/youlai/boot/security/filter/CaptchaValidationFilter.java
+++ b/src/main/java/com/youlai/boot/security/filter/CaptchaValidationFilter.java
@@ -66,7 +66,7 @@ public class CaptchaValidationFilter extends OncePerRequestFilter {
}
// 包装请求,确保下游还能读取 body
- ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request);
+ ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request, -1);
byte[] bodyBytes = StreamUtils.copyToByteArray(requestWrapper.getInputStream());
String body = new String(bodyBytes, StandardCharsets.UTF_8);
diff --git a/src/main/java/com/youlai/boot/security/model/SmsAuthenticationToken.java b/src/main/java/com/youlai/boot/security/model/SmsAuthenticationToken.java
index d2aec807..2e575cf5 100644
--- a/src/main/java/com/youlai/boot/security/model/SmsAuthenticationToken.java
+++ b/src/main/java/com/youlai/boot/security/model/SmsAuthenticationToken.java
@@ -33,7 +33,7 @@ public class SmsAuthenticationToken extends AbstractAuthenticationToken {
*/
public SmsAuthenticationToken(Object principal, Object credentials) {
// 没有授权信息时,设置为 null
- super(null);
+ super((Collection extends GrantedAuthority>) null);
this.principal = principal;
this.credentials = credentials;
// 默认未认证
diff --git a/src/main/java/com/youlai/boot/security/model/WxMiniAppCodeAuthenticationToken.java b/src/main/java/com/youlai/boot/security/model/WxMiniAppCodeAuthenticationToken.java
index 675e9db6..21b4d36f 100644
--- a/src/main/java/com/youlai/boot/security/model/WxMiniAppCodeAuthenticationToken.java
+++ b/src/main/java/com/youlai/boot/security/model/WxMiniAppCodeAuthenticationToken.java
@@ -24,7 +24,7 @@ public class WxMiniAppCodeAuthenticationToken extends AbstractAuthenticationToke
*/
public WxMiniAppCodeAuthenticationToken(Object principal) {
// 没有授权信息时,设置为 null
- super(null);
+ super((Collection extends GrantedAuthority>) null);
this.principal = principal;
// 默认未认证
this.setAuthenticated(false);
diff --git a/src/main/java/com/youlai/boot/security/model/WxMiniAppPhoneAuthenticationToken.java b/src/main/java/com/youlai/boot/security/model/WxMiniAppPhoneAuthenticationToken.java
index 697e8941..c690e8b6 100644
--- a/src/main/java/com/youlai/boot/security/model/WxMiniAppPhoneAuthenticationToken.java
+++ b/src/main/java/com/youlai/boot/security/model/WxMiniAppPhoneAuthenticationToken.java
@@ -28,7 +28,7 @@ public class WxMiniAppPhoneAuthenticationToken extends AbstractAuthenticationTok
* @param iv 初始向量
*/
public WxMiniAppPhoneAuthenticationToken(String code, String encryptedData, String iv) {
- super(null);
+ super((Collection extends GrantedAuthority>) null);
this.principal = code;
this.encryptedData = encryptedData;
this.iv = iv;
diff --git a/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java
index 842ff185..4aba4eb3 100644
--- a/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java
+++ b/src/main/java/com/youlai/boot/system/service/impl/MenuServiceImpl.java
@@ -8,8 +8,8 @@ import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.core.type.TypeReference;
+import tools.jackson.databind.ObjectMapper;
import com.youlai.boot.platform.codegen.model.entity.GenTable;
import com.youlai.boot.security.util.SecurityUtils;
import com.youlai.boot.system.converter.MenuConverter;