Przeglądaj źródła

feat: 调整日志打印

weijianghai 3 miesięcy temu
rodzic
commit
cdad363ef1

+ 0 - 6
pom.xml

@@ -63,12 +63,6 @@
             <artifactId>hutool-all</artifactId>
             <version>5.8.22</version>
         </dependency>
-        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.10.1</version>
-        </dependency>
         <!-- https://mvnrepository.com/artifact/io.minio/minio -->
         <dependency>
             <groupId>io.minio</groupId>

+ 0 - 35
src/main/java/com/nokia/financeapi/config/web/MyDispatcherServlet.java

@@ -1,35 +0,0 @@
-package com.nokia.financeapi.config.web;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.servlet.DispatcherServlet;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-@Slf4j
-public class MyDispatcherServlet extends DispatcherServlet {
-    /**
-     * 上传和返回文件流的接口uri,不替换request和response
-     */
-    public static final Set<String> UN_WRAPPER = Stream.of(
-            "/house-car/house/data-check/api/getBuildingAreaDiffExport",
-            "/house-car/house/data-check/api/getHouseAbnormalDataExport",
-            "/house-car/house/report/api/importData",
-            "/house-car/car/data-import/api/dataImport"
-    ).collect(Collectors.toSet());
-
-    @Override
-    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
-        String uri = request.getRequestURI();
-        if (UN_WRAPPER.contains(request.getRequestURI())) {
-            super.doDispatch(request, response);
-        } else {
-            // 替换request和response
-            log.info("替换 {} 的request和response", uri);
-            super.doDispatch(new MyHttpServletRequestWrapper(request), new MyHttpServletResponseWrapper(response));
-        }
-    }
-}

+ 0 - 58
src/main/java/com/nokia/financeapi/config/web/MyHttpServletRequestWrapper.java

@@ -1,58 +0,0 @@
-package com.nokia.financeapi.config.web;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.util.StreamUtils;
-
-import javax.servlet.ReadListener;
-import javax.servlet.ServletInputStream;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-
-/**
- * 解决流只能读取一次问题
- */
-@Slf4j
-public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
-    private byte[] bytes;
-
-    public MyHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
-        super(request);
-        bytes = StreamUtils.copyToByteArray(request.getInputStream());
-    }
-
-    @Override
-    public ServletInputStream getInputStream() {
-        ByteArrayInputStream stream = new ByteArrayInputStream(bytes);
-        return new ServletInputStream() {
-            @Override
-            public boolean isFinished() {
-                return false;
-            }
-
-            @Override
-            public boolean isReady() {
-                return false;
-            }
-
-            @Override
-            public void setReadListener(ReadListener readListener) {
-                //
-            }
-
-            @Override
-            public int read() {
-                return stream.read();
-            }
-        };
-    }
-
-    @Override
-    public BufferedReader getReader() throws UnsupportedEncodingException {
-        return new BufferedReader(new InputStreamReader(getInputStream(), super.getCharacterEncoding()));
-    }
-}

+ 0 - 47
src/main/java/com/nokia/financeapi/config/web/MyHttpServletResponseWrapper.java

@@ -1,47 +0,0 @@
-package com.nokia.financeapi.config.web;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.WriteListener;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-/**
- * 解决流只能读取一次问题
- */
-public class MyHttpServletResponseWrapper extends HttpServletResponseWrapper {
-    private ByteArrayOutputStream byteArrayOutputStream;
-    private ServletOutputStream servletOutputStream;
-
-    public MyHttpServletResponseWrapper(HttpServletResponse response) {
-        super(response);
-        byteArrayOutputStream = new ByteArrayOutputStream();
-        servletOutputStream = new ServletOutputStream() {
-            @Override
-            public boolean isReady() {
-                return false;
-            }
-
-            @Override
-            public void setWriteListener(WriteListener writeListener) {
-                //
-            }
-
-            @Override
-            public void write(int b) throws IOException {
-                response.getOutputStream().write(b);
-                byteArrayOutputStream.write(b);
-            }
-        };
-    }
-
-    @Override
-    public ServletOutputStream getOutputStream() {
-        return servletOutputStream;
-    }
-
-    public byte[] toByteArray() {
-        return byteArrayOutputStream.toByteArray();
-    }
-}

+ 6 - 23
src/main/java/com/nokia/financeapi/config/web/MyWebMvcConfigurer.java

@@ -1,38 +1,21 @@
 package com.nokia.financeapi.config.web;
 
-import com.nokia.financeapi.service.common.RequestLogService;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration;
-import org.springframework.context.annotation.Bean;
+import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.DispatcherServlet;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 @Configuration
+@RequiredArgsConstructor
 public class MyWebMvcConfigurer implements WebMvcConfigurer {
-    private final RequestLogService requestLogService;
-
-    public MyWebMvcConfigurer(RequestLogService requestLogService) {
-        this.requestLogService = requestLogService;
-    }
+    private final RequestLogHandlerInterceptor requestLogHandlerInterceptor;
 
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         // 添加请求日志拦截
-        registry.addInterceptor(new RequestLogHandlerInterceptor(requestLogService))
-                .addPathPatterns("/**").excludePathPatterns("/webjars/**", "/doc**", "/v3/**", "/test/**");
-        // 添加token拦截
-//        registry.addInterceptor(new TokenInterceptor()).addPathPatterns("/house-car/**");
-    }
-
-    /**
-     * 使用自定义DispatcherServlet
-     */
-    @Bean
-    @Qualifier(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)
-    public DispatcherServlet dispatcherServlet() {
-        return new MyDispatcherServlet();
+        registry.addInterceptor(requestLogHandlerInterceptor)
+                .addPathPatterns("/**")
+                .excludePathPatterns("/webjars/**", "/v3/**", "/doc.html", "/favicon.ico", "/test/**");
     }
 
 //    /**

+ 93 - 43
src/main/java/com/nokia/financeapi/config/web/RequestLogHandlerInterceptor.java

@@ -1,25 +1,33 @@
 package com.nokia.financeapi.config.web;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
+import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.nokia.financeapi.common.R;
 import com.nokia.financeapi.pojo.po.common.RequestLogPo;
 import com.nokia.financeapi.service.common.RequestLogService;
 import com.nokia.financeapi.utils.AESUtil;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
+import org.springframework.core.MethodParameter;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
 import org.springframework.lang.Nullable;
 import org.springframework.util.StopWatch;
-import org.springframework.util.StreamUtils;
 import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdvice;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.lang.reflect.Type;
 import java.net.URLDecoder;
-import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -32,16 +40,16 @@ import java.util.UUID;
  * 请求日志拦截器
  */
 @Slf4j
-public class RequestLogHandlerInterceptor implements HandlerInterceptor {
+@ControllerAdvice
+@RequiredArgsConstructor
+public class RequestLogHandlerInterceptor implements HandlerInterceptor, RequestBodyAdvice, ResponseBodyAdvice<Object> {
     /**
      * 计时器线程变量
      */
     private static final ThreadLocal<StopWatch> STOP_WATCH_THREAD_LOCAL = new ThreadLocal<>();
-    private RequestLogService requestLogService;
-
-    public RequestLogHandlerInterceptor(RequestLogService requestLogService) {
-        this.requestLogService = requestLogService;
-    }
+    private static final ThreadLocal<RequestLogPo> REQUEST_LOG_PO_THREAD_LOCAL = new ThreadLocal<>();
+    private final RequestLogService requestLogService;
+    private final ObjectMapper objectMapper;
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
@@ -71,12 +79,6 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor {
             parameters.put(k, v);
         }
         log.info("查询参数: {}", new ObjectMapper().writeValueAsString(parameters));
-        String body = null;
-        if (!MyDispatcherServlet.UN_WRAPPER.contains(request.getRequestURI())) {
-            // 请求体参数
-            body = StreamUtils.copyToString(request.getInputStream(), Charset.forName(request.getCharacterEncoding()));
-            log.info("请求体参数: {}", StringUtils.trimAllWhitespace(body));
-        }
         String token = request.getHeader("token");
         if (!StringUtils.hasText(token) || "undefined".equals(token)) {
             token = parameters.get("token");
@@ -90,9 +92,8 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor {
             log.info("urlDecodeToken: {}", urlDecodeToken);
             String decryptToken = AESUtil.decrypt(urlDecodeToken);
             log.info("decryptToken: {}", decryptToken);
-            Gson gson = new Gson();
-            Map<String, String> map = gson.fromJson(decryptToken, new TypeToken<Map<String, String>>() {
-            }.getType());
+            Map<String, String> map = objectMapper.readValue(decryptToken,
+                    TypeFactory.defaultInstance().constructMapType(Map.class, String.class, String.class));
             if (!"FINANCE".equals(map.get("APP_ID"))
                     || !StringUtils.hasText(map.get("LOGIN_ID"))
                     || !StringUtils.hasText(map.get("TIME_STAMP"))
@@ -109,21 +110,20 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor {
                 return unauthorized(response);
             }
             Map<String, String> requestParameters = new HashMap<>();
-            requestParameters.put("request_parameters", gson.toJson(parameters));
-            requestParameters.put("request_body", body);
+            requestParameters.put("request_parameters", objectMapper.writeValueAsString(parameters));
             RequestLogPo requestLogPo = new RequestLogPo();
+            REQUEST_LOG_PO_THREAD_LOCAL.set(requestLogPo);
             requestLogPo.setRequestTime(now);
             requestLogPo.setLoginId(map.get("LOGIN_ID"));
             requestLogPo.setPageUrl(map.get("REQUEST_URL"));
             requestLogPo.setApi(request.getRequestURI());
-            requestLogPo.setRequestParameters(gson.toJson(requestParameters));
-            requestLogPo.setHeaders(gson.toJson(headers));
+            requestLogPo.setRequestParameters(objectMapper.writeValueAsString(requestParameters));
+            requestLogPo.setHeaders(objectMapper.writeValueAsString(headers));
             requestLogPo.setAppId(map.get("APP_ID"));
             requestLogPo.setToken(urlDecodeToken);
             requestLogPo.setTimeStamp(timeStamp);
             requestLogPo.setExpireTime(expireTime);
             requestLogPo.setExpireTimeStamp(expireTimeStamp);
-            requestLogService.offer(requestLogPo);
         } catch (Exception e) {
             log.warn("token解密失败: {}", token);
             return forbidden(response);
@@ -134,47 +134,97 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor {
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
                                 @Nullable Exception ex) throws Exception {
-        if (!MyDispatcherServlet.UN_WRAPPER.contains(request.getRequestURI())) {
-            MyHttpServletResponseWrapper wrapper = (MyHttpServletResponseWrapper) response;
-            String responseString = new String(wrapper.toByteArray());
-//            log.info("响应 {}: {}", wrapper.getStatus(), responseString);
-            // 返回结果打印前500个字符
-            log.info("返回 {}: {}", wrapper.getStatus(),
-                    org.apache.commons.lang3.StringUtils.substring(responseString, 0, 500));
-        } else {
-            log.info("响应 {}", response.getStatus());
-        }
+        log.info("响应状态: {}", response.getStatus());
         StopWatch stopWatch = STOP_WATCH_THREAD_LOCAL.get();
         stopWatch.stop();
-        log.info("耗时 {} ms", stopWatch.getTotalTimeMillis());
+        log.info("耗时: {} ms", stopWatch.getTotalTimeMillis());
         STOP_WATCH_THREAD_LOCAL.remove();
+        RequestLogPo requestLogPo = REQUEST_LOG_PO_THREAD_LOCAL.get();
+        if (requestLogPo != null) {
+            requestLogService.offer(requestLogPo);
+        }
+        REQUEST_LOG_PO_THREAD_LOCAL.remove();
     }
 
     private boolean forbidden(HttpServletResponse response) throws IOException {
-        response.setCharacterEncoding("UTF-8");
-        response.setContentType("application/json; charset=utf-8");
-        String r = new Gson().toJson(R.error().code(403).message("没有权限访问"));
+        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
+        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+        String r = objectMapper.writeValueAsString(R.error().code(403).message("没有权限访问"));
         byte[] bytes = r.getBytes();
         response.getOutputStream().write(bytes);
         StopWatch stopWatch = STOP_WATCH_THREAD_LOCAL.get();
         stopWatch.stop();
-        log.warn("返回 {}: {}", response.getStatus(), r);
+        log.warn("响应状态: {}", response.getStatus());
+        log.warn("响应内容: {}", r);
         log.info("耗时 {} ms", stopWatch.getTotalTimeMillis());
         STOP_WATCH_THREAD_LOCAL.remove();
         return false;
     }
 
     private boolean unauthorized(HttpServletResponse response) throws IOException {
-        response.setCharacterEncoding("UTF-8");
-        response.setContentType("application/json; charset=utf-8");
-        String r = new Gson().toJson(R.error().code(401).message("请刷新页面或重新登录"));
+        response.setCharacterEncoding(StandardCharsets.UTF_8.name());
+        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+        String r = objectMapper.writeValueAsString(R.error().code(401).message("请刷新页面或重新登录"));
         byte[] bytes = r.getBytes();
         response.getOutputStream().write(bytes);
         StopWatch stopWatch = STOP_WATCH_THREAD_LOCAL.get();
         stopWatch.stop();
-        log.info("返回 {}: {}", response.getStatus(), r);
+        log.warn("响应状态: {}", response.getStatus());
+        log.warn("响应内容: {}", r);
         log.info("耗时 {} ms", stopWatch.getTotalTimeMillis());
         STOP_WATCH_THREAD_LOCAL.remove();
         return false;
     }
+
+    @Override
+    public boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
+        return true;
+    }
+
+    @Override
+    public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException {
+        return inputMessage;
+    }
+
+    @Override
+    public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
+        try {
+            if (STOP_WATCH_THREAD_LOCAL.get() != null) {
+                String bodyStr = objectMapper.writeValueAsString(body);
+                log.info("请求体参数: {}", bodyStr);
+                RequestLogPo requestLogPo = REQUEST_LOG_PO_THREAD_LOCAL.get();
+                if (requestLogPo != null) {
+                    Map<String, String> requestParameters = objectMapper.readValue(requestLogPo.getRequestParameters(),
+                            TypeFactory.defaultInstance().constructMapType(Map.class, String.class, String.class));
+                    requestParameters.put("request_body", bodyStr);
+                    requestLogPo.setRequestParameters(objectMapper.writeValueAsString(requestParameters));
+                }
+            }
+        } catch (Exception e) {
+            log.error(e.toString(), e);
+        }
+        return body;
+    }
+
+    @Override
+    public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
+        return body;
+    }
+
+    @Override
+    public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
+        return true;
+    }
+
+    @Override
+    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
+        try {
+            if (STOP_WATCH_THREAD_LOCAL.get() != null) {
+                log.info("响应内容: {}", org.apache.commons.lang3.StringUtils.substring(objectMapper.writeValueAsString(body), 0, 500));
+            }
+        } catch (Exception e) {
+            log.error(e.toString(), e);
+        }
+        return body;
+    }
 }

+ 0 - 57
src/main/java/com/nokia/financeapi/config/web/TokenInterceptor.java

@@ -1,57 +0,0 @@
-//package com.nokia.financeapi.config.web;
-//
-//import com.google.gson.Gson;
-//import com.google.gson.reflect.TypeToken;
-//import com.nokia.financeapi.common.R;
-//import com.nokia.financeapi.utils.AESUtil;
-//import lombok.NoArgsConstructor;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.util.StringUtils;
-//import org.springframework.web.servlet.HandlerInterceptor;
-//
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.util.Map;
-//
-///**
-// * web登录拦截
-// */
-//@Slf4j
-//@NoArgsConstructor
-//public class TokenInterceptor implements HandlerInterceptor {
-//    @Override
-//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-//        // todo: 记录日志
-//        String token = request.getHeader("Token");
-//        log.info("token: {}", token);
-//        if (!StringUtils.hasText(token)) {
-//            return forbidden(response);
-//        }
-//        if ("test_hebei".equals(token)) {
-//            return true;
-//        }
-//        try {
-//            String decodeToken = AESUtil.decrypt(token);
-//            log.info("decodeToken: {}", decodeToken);
-//            Gson gson = new Gson();
-//            Map<String, String> map = gson.fromJson(decodeToken, new TypeToken<Map<String, String>>() {
-//            }.getType());
-//            if (!"FINANCE".equals(map.get("APP_ID")) || !StringUtils.hasText(map.get("LOGIN_ID"))) {
-//                return forbidden(response);
-//            }
-//        } catch (Exception e) {
-//            log.warn("token解密失败: {}", token);
-//            return forbidden(response);
-//        }
-//        return true;
-//    }
-//
-//    private boolean forbidden(HttpServletResponse response) throws IOException {
-//        response.setCharacterEncoding("UTF-8");
-//        response.setContentType("application/json; charset=utf-8");
-//        byte[] bytes = new Gson().toJson(R.error().code(403).message("没有权限访问")).getBytes();
-//        response.getOutputStream().write(bytes);
-//        return false;
-//    }
-//}

+ 17 - 5
src/main/java/com/nokia/financeapi/service/car/CarService.java

@@ -1,7 +1,9 @@
 package com.nokia.financeapi.service.car;
 
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+import com.nokia.financeapi.common.exception.MyRuntimeException;
 import com.nokia.financeapi.pojo.po.common.AreaPo;
 import com.nokia.financeapi.pojo.po.common.OrganizationPo;
 import lombok.extern.slf4j.Slf4j;
@@ -36,7 +38,12 @@ public class CarService {
     /**
      * 一级单位的二级单位字典
      */
-    static final Map<String, List<String>> ER_JI_MAP = new Gson().fromJson("""
+    static final Map<String, List<String>> ER_JI_MAP;
+
+    static {
+        try {
+            ER_JI_MAP = new ObjectMapper().readValue(
+                    """
 {
     "石家庄": ["鹿泉", "藁城", "栾城", "井陉矿区", "井陉", "无极", "正定", "元氏", "新乐", "晋州", "平山", "灵寿", "赞皇", "赵县", "行唐", "高邑", "辛集", "深泽"],
     "唐山": ["唐山高开区", "迁西", "海港", "开平", "丰南", "滦县", "乐亭", "丰润", "玉田", "古冶", "曹妃甸", "遵化", "滦南", "迁安"],
@@ -51,8 +58,13 @@ public class CarService {
     "衡水": ["景县", "阜城", "枣强", "深州", "饶阳", "故城", "武强", "武邑", "冀州", "安平"],
     "雄安": ["容城", "雄县", "安新"]
 }
-                    """,
-            new TypeToken<Map<String, List<String>>>() {}.getType());
+                            """,
+                    TypeFactory.defaultInstance().constructMapType(Map.class, String.class, List.class)
+            );
+        } catch (JsonProcessingException e) {
+            throw new MyRuntimeException(e);
+        }
+    }
 
     /**
      * 匹配车牌

+ 5 - 3
src/main/java/com/nokia/financeapi/utils/AESUtil.java

@@ -1,7 +1,7 @@
 package com.nokia.financeapi.utils;
 
 import cn.hutool.core.codec.Base64;
-import com.google.gson.Gson;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.SecretKeySpec;
@@ -82,9 +82,10 @@ public class AESUtil {
         //请求的地址
         map.put("REQUEST_URL","");
         map.put("EXPIRE_TIME","604800");
+        ObjectMapper objectMapper = new ObjectMapper();
         // 加密串
         try {
-            return AESUtil.encrypt(new Gson().toJson(map), KEY);
+            return AESUtil.encrypt(objectMapper.writeValueAsString(map), KEY);
         } catch (Exception e) {
             return "";
         }
@@ -105,8 +106,9 @@ public class AESUtil {
         map.put("REQUEST_URL","");
         map.put("EXPIRE_TIME","3600");
 
+        ObjectMapper objectMapper = new ObjectMapper();
         // 加密串
-        String encrypt = AESUtil.encrypt(new Gson().toJson(map), "2na$$PdV9AW8b#CS");
+        String encrypt = AESUtil.encrypt(objectMapper.writeValueAsString(map), "2na$$PdV9AW8b#CS");
         // 返回
         System.out.println(encrypt);
         //解密

+ 2 - 2
src/main/resources/application-dev.yml

@@ -9,8 +9,8 @@ spring:
 #    url: jdbc:postgresql://192.168.50.3:15432/financialdb
 #    username: postgres
 #    password: NFQCgBA6YhNvgAqG6THw
-    url: jdbc:postgresql://127.0.0.1:5432/financialdb
-#    url: jdbc:postgresql://192.168.65.128:5432/financialdb
+#    url: jdbc:postgresql://127.0.0.1:5432/financialdb
+    url: jdbc:postgresql://192.168.65.128:5432/financialdb
     username: postgres
     password: Test!234
 logging:

+ 2 - 2
src/main/resources/logback-spring.xml

@@ -12,7 +12,7 @@
         <file>${PATH}/trace.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
             <!-- rollover daily -->
-            <fileNamePattern>${PATH}/trace.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
+            <fileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
             <!-- each file should be at most 100MB, keep 180 days worth of history, but at most 20GB -->
             <maxFileSize>100MB</maxFileSize>
             <maxHistory>180</maxHistory>
@@ -27,7 +27,7 @@
         <file>${PATH}/error.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
             <!-- rollover daily -->
-            <fileNamePattern>${PATH}/error.%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
+            <fileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
             <!-- each file should be at most 100MB, keep 180 days worth of history, but at most 20GB -->
             <maxFileSize>100MB</maxFileSize>
             <maxHistory>180</maxHistory>

+ 15 - 11
src/test/java/com/nokia/financeapi/shouqi/CarZuLinTests.java

@@ -1,7 +1,7 @@
 package com.nokia.financeapi.shouqi;
 
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.nokia.financeapi.common.exception.MyRuntimeException;
 import com.nokia.financeapi.service.car.CarService;
 import com.nokia.financeapi.service.common.AreaService;
@@ -177,6 +177,7 @@ class CarZuLinTests {
      * @param list 数据
      */
     public List<LinkedHashMap<String, String>> dataProcessing(Path path, List<LinkedHashMap<String, String>> list) {
+        ObjectMapper objectMapper = new ObjectMapper();
         List<LinkedHashMap<String, String>> resultList = new ArrayList<>();
         for (LinkedHashMap<String, String> map : list) {
             String yearMonth = map.get("year_month");
@@ -212,15 +213,18 @@ class CarZuLinTests {
             map.put("source", path.getFileName().toString());
             resultList.add(map);
             for (int i = 1; i < zuQiInt; i++) {
-                Gson gson = new Gson();
-                LinkedHashMap<String, String> t = gson.fromJson(gson.toJson(map), new TypeToken<>() {
-                });
-                localDate = localDate.plusMonths(1);
-                Integer nextMonthInteger = Integer.valueOf(localDate.format(DateTimeFormatter.ofPattern("yyyyMM")));
-                t.put("year_month", nextMonthInteger.toString());
-                t.put("che_pai_hao", tiHuanNianYueInteger != null
-                        && nextMonthInteger.compareTo(tiHuanNianYueInteger) >= 0 ? chePaiHaoTiHuan : chePaiHaoHeTong);
-                resultList.add(t);
+                try {
+                    LinkedHashMap<String, String> t = objectMapper.readValue(objectMapper.writeValueAsString(map),
+                            TypeFactory.defaultInstance().constructMapType(LinkedHashMap.class, String.class, String.class));
+                    localDate = localDate.plusMonths(1);
+                    Integer nextMonthInteger = Integer.valueOf(localDate.format(DateTimeFormatter.ofPattern("yyyyMM")));
+                    t.put("year_month", nextMonthInteger.toString());
+                    t.put("che_pai_hao", tiHuanNianYueInteger != null
+                            && nextMonthInteger.compareTo(tiHuanNianYueInteger) >= 0 ? chePaiHaoTiHuan : chePaiHaoHeTong);
+                    resultList.add(t);
+                } catch (Exception e) {
+                    log.error(e.toString(), e);
+                }
             }
         }
         // 去重