Sfoglia il codice sorgente

优化枚举序列化逻辑;移除Using相关逻辑;

woody 1 anno fa
parent
commit
ca66ae51e1

+ 11 - 3
framework-base/src/main/java/com/chelvc/framework/base/apidoc/CustomizeParameterAnalyser.java

@@ -1,16 +1,18 @@
 package com.chelvc.framework.base.apidoc;
 
+import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.time.Duration;
 import java.util.Map;
 
 import com.arsframework.apidoc.core.Parameter;
 import com.arsframework.apidoc.core.ParameterAnalyser;
-import com.chelvc.framework.common.annotation.EnumerateWrapping;
 import com.chelvc.framework.common.model.Paging;
 import com.chelvc.framework.common.model.Period;
 import com.chelvc.framework.common.model.Region;
+import com.chelvc.framework.common.serializer.JacksonEnumerateSerializer;
 import com.chelvc.framework.common.util.StringUtils;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
 /**
  * 自定义接口文档参数解析实现
@@ -30,8 +32,14 @@ public class CustomizeParameterAnalyser extends ParameterAnalyser {
      * @return true/false
      */
     private boolean isEnumerateWrapping(Parameter parameter) {
-        return (parameter.getField() != null && parameter.getField().isAnnotationPresent(EnumerateWrapping.class))
-                || parameter.getOriginal().isAnnotationPresent(EnumerateWrapping.class);
+        Field field = parameter.getField();
+        if (field == null) {
+            JsonSerialize annotation = parameter.getOriginal().getAnnotation(JsonSerialize.class);
+            return annotation != null && JacksonEnumerateSerializer.class.isAssignableFrom(annotation.using());
+        }
+        JsonSerialize annotation = field.getAnnotation(JsonSerialize.class);
+        return annotation != null && (JacksonEnumerateSerializer.class.isAssignableFrom(annotation.using())
+                || JacksonEnumerateSerializer.class.isAssignableFrom(annotation.contentUsing()));
     }
 
     @Override

+ 7 - 33
framework-base/src/main/java/com/chelvc/framework/base/context/SessionContextHolder.java

@@ -16,7 +16,6 @@ import com.chelvc.framework.common.model.Platform;
 import com.chelvc.framework.common.model.Result;
 import com.chelvc.framework.common.model.Session;
 import com.chelvc.framework.common.model.Terminal;
-import com.chelvc.framework.common.model.Using;
 import com.chelvc.framework.common.util.AssertUtils;
 import com.chelvc.framework.common.util.ObjectUtils;
 import com.chelvc.framework.common.util.StringUtils;
@@ -49,11 +48,6 @@ public class SessionContextHolder implements ServletRequestListener {
      */
     public static final String HEADER_ID = "id";
 
-    /**
-     * 使用信息请求头
-     */
-    public static final String HEADER_USING = "using";
-
     /**
      * 应用范围请求头
      */
@@ -169,9 +163,9 @@ public class SessionContextHolder implements ServletRequestListener {
             session = Session.builder().id(id).scope(scope).anonymous(anonymous)
                     .timestamp(System.currentTimeMillis()).build();
         } else {
-            session = Session.builder().id(id).scope(scope).anonymous(anonymous).using(original.getUsing())
-                    .host(original.getHost()).device(original.getDevice()).channel(original.getChannel())
-                    .platform(original.getPlatform()).terminal(original.getTerminal()).version(original.getVersion())
+            session = Session.builder().id(id).scope(scope).anonymous(anonymous).host(original.getHost())
+                    .device(original.getDevice()).channel(original.getChannel()).platform(original.getPlatform())
+                    .terminal(original.getTerminal()).version(original.getVersion())
                     .fingerprint(original.getFingerprint()).timestamp(original.getTimestamp()).build();
         }
         deque.push(session);
@@ -216,25 +210,6 @@ public class SessionContextHolder implements ServletRequestListener {
         return StringUtils.ifEmpty(HttpUtils.getHost(request), (String) null);
     }
 
-    /**
-     * 获取使用信息
-     *
-     * @return 使用信息
-     */
-    public static Using getUsing() {
-        return ObjectUtils.ifNull(getSession(false), Session::getUsing);
-    }
-
-    /**
-     * 获取使用信息
-     *
-     * @param request Http请求对象
-     * @return 使用信息
-     */
-    public static Using getUsing(@NonNull HttpServletRequest request) {
-        return StringUtils.ifEmpty(request.getHeader(HEADER_USING), Using::valueOf);
-    }
-
     /**
      * 获取应用范围
      *
@@ -584,11 +559,10 @@ public class SessionContextHolder implements ServletRequestListener {
     @Override
     public void requestInitialized(ServletRequestEvent event) {
         HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
-        Session session = Session.builder().id(getId(request)).host(getHost(request)).using(getUsing(request))
-                .scope(getScope(request)).device(getDevice(request)).channel(getChannel(request))
-                .platform(getPlatform(request)).terminal(getTerminal(request)).version(getVersion(request))
-                .fingerprint(getFingerprint(request)).anonymous(isAnonymous(request)).timestamp(getTimestamp(request))
-                .build();
+        Session session = Session.builder().id(getId(request)).host(getHost(request)).scope(getScope(request))
+                .device(getDevice(request)).channel(getChannel(request)).platform(getPlatform(request))
+                .terminal(getTerminal(request)).version(getVersion(request)).fingerprint(getFingerprint(request))
+                .anonymous(isAnonymous(request)).timestamp(getTimestamp(request)).build();
         setSession(session);
     }
 

+ 1 - 1
framework-boot/pom.xml

@@ -69,7 +69,7 @@
                 <artifactId>apidoc-maven-plugin</artifactId>
                 <version>${apidoc-maven-plugin.version}</version>
                 <configuration>
-                    <includeHeaders>{String} scope 应用范围,{String} using 使用信息: NORMAL(常规使用)、DAILY(当日首次使用)、INITIAL(历史首次使用),{String} device 设备标识,{String} channel 渠道来源,{String} platform 平台标识: PC(PC)、IOS(苹果)、ANDROID(安卓),{String} terminal 终端标识: WEB(Web)、APP(App)、APPLET(小程序),{String} version 终端版本,{Long} timestamp 请求时间戳,{String} signature 签名信息,{String} fingerprint 设备指纹,{String} authorization 认证信息</includeHeaders>
+                    <includeHeaders>{String} scope 应用范围,{String} device 设备标识,{String} channel 渠道来源,{String} platform 平台标识: PC(PC)、IOS(苹果)、ANDROID(安卓),{String} terminal 终端标识: WEB(Web)、APP(App)、APPLET(小程序),{String} version 终端版本,{Long} timestamp 请求时间戳,{String} signature 签名信息,{String} fingerprint 设备指纹,{String} authorization 认证信息</includeHeaders>
                     <excludeClasses>com.chelvc.framework.base.interceptor.GlobalExceptionInterceptor</excludeClasses>
                     <analyserFactoryClass>com.chelvc.framework.base.apidoc.MethodAnalyserFactory</analyserFactoryClass>
                 </configuration>

+ 0 - 3
framework-common/src/main/java/com/chelvc/framework/common/annotation/Decimal.java

@@ -8,9 +8,7 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import java.math.RoundingMode;
 
-import com.chelvc.framework.common.serializer.JacksonDecimalSerializer;
 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
 /**
  * 小数序列化注解
@@ -23,7 +21,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 @JacksonAnnotationsInside
 @Target(ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
-@JsonSerialize(using = JacksonDecimalSerializer.class)
 public @interface Decimal {
     /**
      * 默认小数保留位数

+ 0 - 27
framework-common/src/main/java/com/chelvc/framework/common/annotation/EnumerateUnwrapping.java

@@ -1,27 +0,0 @@
-package com.chelvc.framework.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.chelvc.framework.common.serializer.JacksonEnumerateDeserializer;
-import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-
-/**
- * 枚举去格式化注解
- *
- * @author Woody
- * @date 2024/1/30
- */
-@Inherited
-@Documented
-@JacksonAnnotationsInside
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE, ElementType.FIELD})
-@JsonDeserialize(using = JacksonEnumerateDeserializer.class)
-public @interface EnumerateUnwrapping {
-}

+ 0 - 27
framework-common/src/main/java/com/chelvc/framework/common/annotation/EnumerateWrapping.java

@@ -1,27 +0,0 @@
-package com.chelvc.framework.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import com.chelvc.framework.common.serializer.JacksonEnumerateSerializer;
-import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
-/**
- * 枚举格式化注解
- *
- * @author Woody
- * @date 2024/1/30
- */
-@Inherited
-@Documented
-@JacksonAnnotationsInside
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE, ElementType.FIELD})
-@JsonSerialize(using = JacksonEnumerateSerializer.class)
-public @interface EnumerateWrapping {
-}

+ 0 - 5
framework-common/src/main/java/com/chelvc/framework/common/model/Session.java

@@ -28,11 +28,6 @@ public class Session implements Serializable {
      */
     private String host;
 
-    /**
-     * 使用信息
-     */
-    private Using using;
-
     /**
      * 应用范围
      */

+ 0 - 36
framework-common/src/main/java/com/chelvc/framework/common/model/Using.java

@@ -1,36 +0,0 @@
-package com.chelvc.framework.common.model;
-
-import lombok.Getter;
-
-/**
- * 系统使用枚举
- *
- * @author Woody
- * @date 2024/1/30
- */
-@Getter
-public enum Using implements Enumerable {
-    /**
-     * 常规使用
-     */
-    NORMAL("常规使用"),
-
-    /**
-     * 当日首次使用
-     */
-    DAILY("当日首次使用"),
-
-    /**
-     * 历史首次使用
-     */
-    INITIAL("历史首次使用");
-
-    /**
-     * 枚举别名
-     */
-    private final String alias;
-
-    Using(String alias) {
-        this.alias = alias;
-    }
-}

+ 0 - 46
framework-common/src/main/java/com/chelvc/framework/common/serializer/JacksonEnumerateDeserializer.java

@@ -1,46 +0,0 @@
-package com.chelvc.framework.common.serializer;
-
-import java.io.IOException;
-import java.util.Map;
-
-import com.chelvc.framework.common.util.ObjectUtils;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.BeanProperty;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
-import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
-
-/**
- * JSON枚举反序列化处理器
- *
- * @author Woody
- * @date 2024/1/30
- */
-public class JacksonEnumerateDeserializer extends StdDeserializer<Object> implements ContextualDeserializer {
-    private Class<?> target;
-
-    public JacksonEnumerateDeserializer() {
-        super(Object.class);
-    }
-
-    @Override
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    public Object deserialize(JsonParser parser, DeserializationContext context) throws IOException {
-        Class<?> clazz = ObjectUtils.ifNull(this.target, Object.class);
-        if (Enum.class.isAssignableFrom(clazz)) {
-            Object value = parser.readValueAs(Object.class);
-            if (value instanceof Map) {
-                value = ((Map<?, ?>) value).keySet().stream().findFirst().orElse(null);
-            }
-            return Enum.valueOf((Class<Enum>) clazz, String.valueOf(value));
-        }
-        return parser.readValueAs(clazz);
-    }
-
-    @Override
-    public JsonDeserializer<?> createContextual(DeserializationContext context, BeanProperty property) {
-        this.target = context.getContextualType().getRawClass();
-        return this;
-    }
-}

+ 0 - 2
framework-feign/src/main/java/com/chelvc/framework/feign/interceptor/FeignHeaderInterceptor.java

@@ -4,7 +4,6 @@ import com.chelvc.framework.base.context.SessionContextHolder;
 import com.chelvc.framework.common.model.Platform;
 import com.chelvc.framework.common.model.Session;
 import com.chelvc.framework.common.model.Terminal;
-import com.chelvc.framework.common.model.Using;
 import com.chelvc.framework.common.util.ObjectUtils;
 import feign.RequestInterceptor;
 import feign.RequestTemplate;
@@ -28,7 +27,6 @@ public class FeignHeaderInterceptor implements RequestInterceptor {
             template.header("x-real-ip", session.getHost());
             template.header(SessionContextHolder.HEADER_ID,
                     (String) ObjectUtils.ifNull(session.getId(), String::valueOf));
-            template.header(SessionContextHolder.HEADER_USING, ObjectUtils.ifNull(session.getUsing(), Using::name));
             template.header(SessionContextHolder.HEADER_SCOPE, session.getScope());
             template.header(SessionContextHolder.HEADER_DEVICE, session.getDevice());
             template.header(SessionContextHolder.HEADER_CHANNEL, session.getChannel());

+ 0 - 3
framework-security/src/main/java/com/chelvc/framework/security/annotation/Desensitize.java

@@ -7,9 +7,7 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
-import com.chelvc.framework.security.serializer.JacksonDesensitizeSerializer;
 import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 
 /**
  * 敏感数据脱敏
@@ -22,7 +20,6 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 @JacksonAnnotationsInside
 @Target(ElementType.FIELD)
 @Retention(RetentionPolicy.RUNTIME)
-@JsonSerialize(using = JacksonDesensitizeSerializer.class)
 public @interface Desensitize {
     /**
      * 数据脱敏表达式