Browse Source

refactor(charging): 用Jackson替换Gson实现JSON序列化和反序列化

- 移除Gson依赖,调整pom.xml依赖移除Gson
- 使用Jackson的ObjectMapper替代所有Gson相关的Json处理
- 修改ChargingBusinessServiceImpl中调用第三方接口的JSON处理逻辑,统一使用Jackson
- 修改ChargingReceptionServiceImpl接收推送方法JSON解析和生成,使用Jackson处理
- 更新ChargingUtil工具类,使用Jackson替代Gson进行加密数据的JSON转换及响应解码
- 调整ElectricTokenManager获取Token流程中的JSON转换为Jackson实现
- 修改OkHttpUtil中HTTP请求的响应JSON解析,返回JsonNode替代JsonObject
- 更新JwtAuthenticationEntryPoint、LinkDataController等处JSON读写为Jackson实现
- 修改数据实体类增加Jackson注解,实现大驼峰字段映射及自动识别字段
- 统一异常处理方式,确保序列化相关异常被抛出或捕获处理
- 优化日志打印,改为Jackson序列化输出对象信息
SheepHy 1 week ago
parent
commit
1069fb68d2

+ 0 - 6
pom.xml

@@ -92,12 +92,6 @@
             <scope>runtime</scope>
         </dependency>
 
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-            <version>2.8.9</version>
-        </dependency>
-
 
         <dependency>
             <groupId>cn.hutool</groupId>

+ 6 - 5
src/main/java/com/zsElectric/boot/charging/controller/ChargingBusinessController.java

@@ -1,5 +1,6 @@
 package com.zsElectric.boot.charging.controller;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.zsElectric.boot.charging.dto.StartChargingRequestDTO;
 import com.zsElectric.boot.charging.dto.StartChargingResponseVO;
 import com.zsElectric.boot.charging.service.ChargingBusinessService;
@@ -51,7 +52,7 @@ public class ChargingBusinessController {
     @Operation(summary = "请求设备认证")
     @GetMapping("/queryEquipAuth")
     @Log(value = "请求设备认证", module = LogModuleEnum.PARKING_CALL, params = true, result = true)
-    public Result<EquipmentAuthResponseVO> queryEquipAuth(String EquipAuthSeq, String ConnectorID){
+    public Result<EquipmentAuthResponseVO> queryEquipAuth(String EquipAuthSeq, String ConnectorID) throws JsonProcessingException {
         return Result.success(chargingBusinessService.queryEquipAuth(EquipAuthSeq, ConnectorID));
     }
 
@@ -83,7 +84,7 @@ public class ChargingBusinessController {
     @Operation(summary = "设备接口状态查询")
     @PostMapping("/queryStationStatus")
     @Log(value = "设备接口状态查询", module = LogModuleEnum.PARKING_CALL, params = true, result = true)
-     public Result<QueryStationStatusVO> queryStationStatus(@RequestBody List<String> stationIDs){
+     public Result<QueryStationStatusVO> queryStationStatus(@RequestBody List<String> stationIDs) throws JsonProcessingException {
         return Result.success(chargingBusinessService.queryStationStatus(stationIDs));
      }
 
@@ -97,7 +98,7 @@ public class ChargingBusinessController {
     @Operation(summary = "请求启动充电")
     @PostMapping("/startCharging")
     @Log(value = "请求启动充电", module = LogModuleEnum.PARKING_CALL, params = true, result = true)
-    public Result<StartChargingResponseVO> startCharging(@RequestBody StartChargingRequestDTO requestDTO){
+    public Result<StartChargingResponseVO> startCharging(@RequestBody StartChargingRequestDTO requestDTO) throws JsonProcessingException {
         return Result.success(chargingBusinessService.startCharging(requestDTO));
     }
 
@@ -108,7 +109,7 @@ public class ChargingBusinessController {
     @Operation(summary = "查询充电状态")
     @PostMapping("/queryChargingStatus")
     @Log(value = "查询充电状态", module = LogModuleEnum.PARKING_CALL, params = true, result = true)
-    public Result<ChargingStatusQueryResponseVO> queryChargingStatus(@RequestParam("StartChargeSeq") @Schema(description = "充电订单号(格式:运营商ID+唯一编号)") String StartChargeSeq){
+    public Result<ChargingStatusQueryResponseVO> queryChargingStatus(@RequestParam("StartChargeSeq") @Schema(description = "充电订单号(格式:运营商ID+唯一编号)") String StartChargeSeq) throws JsonProcessingException {
         return Result.success(chargingBusinessService.queryChargingStatus(StartChargeSeq));
     }
 
@@ -120,7 +121,7 @@ public class ChargingBusinessController {
     @GetMapping("/stopCharging")
     @Log(value = "请求停止充电", module = LogModuleEnum.PARKING_CALL, params = true, result = true)
     public Result<StopChargingOperationResponseVO> stopCharging(@RequestParam("StartChargeSeq") @Schema(description = "充电订单号(格式:运营商ID+唯一编号)") String StartChargeSeq,
-                                                                @RequestParam("ConnectorID") @Schema(description = "充电设备接口编码") String ConnectorID){
+                                                                @RequestParam("ConnectorID") @Schema(description = "充电设备接口编码") String ConnectorID) throws JsonProcessingException {
         return Result.success(chargingBusinessService.stopCharging(StartChargeSeq, ConnectorID));
     }
 }

+ 5 - 4
src/main/java/com/zsElectric/boot/charging/controller/LinkDataController.java

@@ -2,7 +2,7 @@ package com.zsElectric.boot.charging.controller;
 
 import com.fasterxml.jackson.databind.MapperFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zsElectric.boot.charging.service.ChargingReceptionService;
 import com.zsElectric.boot.common.annotation.Log;
 import com.zsElectric.boot.common.constant.ConnectivityConstants;
@@ -57,7 +57,8 @@ public class LinkDataController {
 
             String data = request.getData();
             String string = AESCryptoUtils.decrypt(data, ConnectivityConstants.DATA_SECRET, ConnectivityConstants.DATA_SECRET_IV);
-            QueryTokenRequestParms queryTokenRequestParms = new Gson().fromJson(string, QueryTokenRequestParms.class);
+            ObjectMapper objectMapper = new ObjectMapper();
+            QueryTokenRequestParms queryTokenRequestParms = objectMapper.readValue(string, QueryTokenRequestParms.class);
             if (queryTokenRequestParms == null || queryTokenRequestParms.getOperatorID() == null || queryTokenRequestParms.getOperatorSecret() == null) {
 
                 responseParmsEntity.setRet(4003);
@@ -88,9 +89,9 @@ public class LinkDataController {
             queryTokenResponseData.setSuccStat(0);
             queryTokenResponseData.setFailReason(0);
 
-            log.info("生成token信息:{}", new Gson().toJson(queryTokenResponseData));
+            log.info("生成token信息:{}", objectMapper.writeValueAsString(queryTokenResponseData));
 
-            String encodeData = AESCryptoUtils.encrypt(new Gson().toJson(queryTokenResponseData), ConnectivityConstants.DATA_SECRET,
+            String encodeData = AESCryptoUtils.encrypt(objectMapper.writeValueAsString(queryTokenResponseData), ConnectivityConstants.DATA_SECRET,
                     ConnectivityConstants.DATA_SECRET_IV);
 
             responseParmsEntity.setRet(0);

+ 8 - 7
src/main/java/com/zsElectric/boot/charging/service/ChargingBusinessService.java

@@ -1,5 +1,6 @@
 package com.zsElectric.boot.charging.service;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.zsElectric.boot.charging.dto.StartChargingRequestDTO;
 import com.zsElectric.boot.charging.dto.StartChargingResponseVO;
 import com.zsElectric.boot.charging.vo.*;
@@ -18,7 +19,7 @@ public interface ChargingBusinessService {
      * @return 返回值描述,如无返回值则为void 返回值为类则包含{@link ChargingPricePolicyVO}
      *
      */
-    ChargingPricePolicyVO queryEquipBusinessPolicy(String EquipBizSeq, String ConnectorID) ;
+    ChargingPricePolicyVO queryEquipBusinessPolicy(String EquipBizSeq, String ConnectorID) throws JsonProcessingException;
 
     /**
      * <p>请求设备认证</p>
@@ -28,7 +29,7 @@ public interface ChargingBusinessService {
      * @return 返回值描述,如无返回值则为void 返回值为类则包含{@link EquipmentAuthResponseVO}
      *
      */
-    EquipmentAuthResponseVO queryEquipAuth(String EquipAuthSeq, String ConnectorID);
+    EquipmentAuthResponseVO queryEquipAuth(String EquipAuthSeq, String ConnectorID) throws JsonProcessingException;
 
     /**
      * <p>查询充电站信息</p>
@@ -39,7 +40,7 @@ public interface ChargingBusinessService {
      * @return 充电站信息列表
      *
      */
-    QueryStationsInfoVO queryStationsInfo(String LastQueryTime, Integer PageNo, Integer PageSize);
+    QueryStationsInfoVO queryStationsInfo(String LastQueryTime, Integer PageNo, Integer PageSize) throws JsonProcessingException;
 
     /**
      * <p>设备接口状态查询</p>
@@ -48,7 +49,7 @@ public interface ChargingBusinessService {
      * @return 充电站状态列表
      *
      */
-    QueryStationStatusVO queryStationStatus(List<String> stationIDs);
+    QueryStationStatusVO queryStationStatus(List<String> stationIDs) throws JsonProcessingException;
 
     /**
      * <p>请求启动充电</p>
@@ -56,17 +57,17 @@ public interface ChargingBusinessService {
      * @param requestDTO,参数为类则包含{@link StartChargingRequestDTO}
      * @return 返回值描述,如无返回值则为void 返回值为类则包含{@link StartChargingResponseVO}
      */
-    StartChargingResponseVO startCharging(StartChargingRequestDTO requestDTO);
+    StartChargingResponseVO startCharging(StartChargingRequestDTO requestDTO) throws JsonProcessingException;
 
     /**
      * <p>查询充电状态</p>
      * @author SheepHy
      */
-    ChargingStatusQueryResponseVO queryChargingStatus(String StartChargeSeq);
+    ChargingStatusQueryResponseVO queryChargingStatus(String StartChargeSeq) throws JsonProcessingException;
 
     /**
      * <p>请求停止充电</p>
      * @author SheepHy
      */
-    StopChargingOperationResponseVO stopCharging(String StartChargeSeq, String ConnectorID);
+    StopChargingOperationResponseVO stopCharging(String StartChargeSeq, String ConnectorID) throws JsonProcessingException;
 }

+ 36 - 33
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingBusinessServiceImpl.java

@@ -1,8 +1,9 @@
 package com.zsElectric.boot.charging.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.zsElectric.boot.charging.dto.StartChargingRequestDTO;
 import com.zsElectric.boot.charging.dto.StartChargingResponseVO;
 import com.zsElectric.boot.charging.service.ChargingBusinessService;
@@ -30,6 +31,8 @@ public class ChargingBusinessServiceImpl implements ChargingBusinessService {
 
     private final ChargingUtil chargingUtil;
 
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
     @Override
     public ApiToken queryToken() {
         try {
@@ -38,8 +41,8 @@ public class ChargingBusinessServiceImpl implements ChargingBusinessService {
                     .setOperatorID(ConnectivityConstants.OPERATOR_ID)
                     .setOperatorSecret(ConnectivityConstants.PLATFORM_OPERATOR_SECRET);
 
-            JsonObject response = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_TOKEN, BeanUtil.beanToMap(queryTokenParms), false);
-            ResponseParmsEntity responseParms = new Gson().fromJson(response, ResponseParmsEntity.class);
+            JsonNode response = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_TOKEN, BeanUtil.beanToMap(queryTokenParms), false);
+            ResponseParmsEntity responseParms = objectMapper.readValue(response.toString(), ResponseParmsEntity.class);
             String data = responseParms.getRet() + responseParms.getMsg() + responseParms.getData();
             boolean verify = HmacMD5Util.verify(data, ConnectivityConstants.PLATFORM_SIG_SECRET, responseParms.getSig());
             if (!verify) {
@@ -65,7 +68,7 @@ public class ChargingBusinessServiceImpl implements ChargingBusinessService {
             String decodeData = AESCryptoUtils.decrypt(responseParms.getData(), ConnectivityConstants.PLATFORM_DATA_SECRET,
                     ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
 
-            QueryTokenResponseData responseData = new Gson().fromJson(decodeData, QueryTokenResponseData.class);
+            QueryTokenResponseData responseData = objectMapper.readValue(decodeData, QueryTokenResponseData.class);
 
             if (responseData.getSuccStat() == 1) {
                 //0-无,1-OperatorID无效
@@ -92,94 +95,94 @@ public class ChargingBusinessServiceImpl implements ChargingBusinessService {
     }
 
     @Override
-    public ChargingPricePolicyVO queryEquipBusinessPolicy(String equipBizSeq, String connectorID) {
+    public ChargingPricePolicyVO queryEquipBusinessPolicy(String equipBizSeq, String connectorID) throws JsonProcessingException {
         Map<String, Object> queryTokenParms = new HashMap<>();
         // 注意:第三方接口要求大驼峰命名
         queryTokenParms.put("EquipBizSeq", equipBizSeq);
         queryTokenParms.put("ConnectorID", connectorID);
         log.info("查询设备价格策略请求参数:{}", queryTokenParms);
-        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_EQUIP_BUSINESS_POLICY, queryTokenParms, true);
+        JsonNode jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_EQUIP_BUSINESS_POLICY, queryTokenParms, true);
         log.info("查询设备价格策略返回结果:{}", jsonObject);
-        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        JsonNode responseDecode = chargingUtil.responseDecode(jsonObject);
         log.info("查询设备价格策略返回结果解密后:{}", responseDecode);
-        return new Gson().fromJson(responseDecode, ChargingPricePolicyVO.class);
+        return objectMapper.readValue(responseDecode.toString(), ChargingPricePolicyVO.class);
     }
 
     @Override
-    public EquipmentAuthResponseVO queryEquipAuth(String EquipAuthSeq, String ConnectorID) {
+    public EquipmentAuthResponseVO queryEquipAuth(String EquipAuthSeq, String ConnectorID) throws JsonProcessingException {
         Map<String, Object> queryTokenParms = new HashMap<>();
         queryTokenParms.put("EquipAuthSeq", EquipAuthSeq);
         queryTokenParms.put("ConnectorID", ConnectorID);
         log.info("查询设备认证请求参数:{}", queryTokenParms);
-        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_EQUIP_AUTH, queryTokenParms, true);
+        JsonNode jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_EQUIP_AUTH, queryTokenParms, true);
         log.info("查询设备认证返回结果:{}", jsonObject);
-        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        JsonNode responseDecode = chargingUtil.responseDecode(jsonObject);
         log.info("查询设备认证返回结果解密后:{}", responseDecode);
-        return new Gson().fromJson(responseDecode, EquipmentAuthResponseVO.class);
+        return objectMapper.readValue(responseDecode.toString(), EquipmentAuthResponseVO.class);
     }
 
     @Override
-    public QueryStationsInfoVO queryStationsInfo(String LastQueryTime, Integer PageNo, Integer PageSize) {
+    public QueryStationsInfoVO queryStationsInfo(String LastQueryTime, Integer PageNo, Integer PageSize) throws JsonProcessingException {
         Map<String, Object> queryParms = new HashMap<>();
         queryParms.put("LastQueryTime", LastQueryTime);
         queryParms.put("PageNo", PageNo);
         queryParms.put("PageSize", PageSize);
         log.info("查询充电站信息请求参数:{}", queryParms);
-        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_STATIONS_INFO, queryParms, true);
+        JsonNode jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_STATIONS_INFO, queryParms, true);
         log.info("查询充电站信息返回结果:{}", jsonObject);
-        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        JsonNode responseDecode = chargingUtil.responseDecode(jsonObject);
         log.info("查询充电站信息返回结果解密后:{}", responseDecode);
         if (responseDecode == null) {
             return null;
         }
-        return new Gson().fromJson(responseDecode, QueryStationsInfoVO.class);
+        return objectMapper.readValue(responseDecode.toString(), QueryStationsInfoVO.class);
     }
 
     @Override
-    public QueryStationStatusVO queryStationStatus(List<String> stationIDs) {
+    public QueryStationStatusVO queryStationStatus(List<String> stationIDs) throws JsonProcessingException {
         Map<String, Object> queryParms = new HashMap<>();
         queryParms.put("StationIDs", stationIDs);
         log.info("设备接口状态查询请求参数:{}", queryParms);
-        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_STATION_STATUS, queryParms, true);
+        JsonNode jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_STATION_STATUS, queryParms, true);
         log.info("设备接口状态查询返回结果:{}", jsonObject);
-        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        JsonNode responseDecode = chargingUtil.responseDecode(jsonObject);
         log.info("设备接口状态查询返回结果解密后:{}", responseDecode);
-        return new Gson().fromJson(responseDecode, QueryStationStatusVO.class);
+        return objectMapper.readValue(responseDecode.toString(), QueryStationStatusVO.class);
     }
 
     @Override
-    public StartChargingResponseVO startCharging(StartChargingRequestDTO requestDTO){
+    public StartChargingResponseVO startCharging(StartChargingRequestDTO requestDTO) throws JsonProcessingException {
         Map<String, Object> stringObjectMap = BeanUtil.beanToMap(requestDTO);
         log.info("设备接口状态查询请求参数:{}", stringObjectMap);
-        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_START_CHARGE, stringObjectMap, true);
+        JsonNode jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_START_CHARGE, stringObjectMap, true);
         log.info("设备接口状态查询返回结果:{}", jsonObject);
-        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        JsonNode responseDecode = chargingUtil.responseDecode(jsonObject);
         log.info("设备接口状态查询返回结果解密后:{}", responseDecode);
-        return new Gson().fromJson(responseDecode, StartChargingResponseVO.class);
+        return objectMapper.readValue(responseDecode.toString(), StartChargingResponseVO.class);
     }
 
     @Override
-    public ChargingStatusQueryResponseVO queryChargingStatus(String StartChargeSeq) {
+    public ChargingStatusQueryResponseVO queryChargingStatus(String StartChargeSeq) throws JsonProcessingException {
         Map<String, Object> queryParms = new HashMap<>();
         queryParms.put("StartChargeSeq", StartChargeSeq);
         log.info("查询充电订单状态请求参数:{}", queryParms);
-        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_EQUIP_CHARGE_STATUS, queryParms, true);
+        JsonNode jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_EQUIP_CHARGE_STATUS, queryParms, true);
         log.info("查询充电订单状态返回结果:{}", jsonObject);
-        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        JsonNode responseDecode = chargingUtil.responseDecode(jsonObject);
         log.info("查询充电订单状态返回结果解密后:{}", responseDecode);
-        return new Gson().fromJson(responseDecode, ChargingStatusQueryResponseVO.class);
+        return objectMapper.readValue(responseDecode.toString(), ChargingStatusQueryResponseVO.class);
     }
 
     @Override
-    public StopChargingOperationResponseVO stopCharging(String StartChargeSeq, String ConnectorID) {
+    public StopChargingOperationResponseVO stopCharging(String StartChargeSeq, String ConnectorID) throws JsonProcessingException {
         Map<String, Object> queryTokenParms = new HashMap<>();
         queryTokenParms.put("StartChargeSeq", StartChargeSeq);
         queryTokenParms.put("ConnectorID", ConnectorID);
         log.info("停止充电请求参数:{}", queryTokenParms);
-        JsonObject jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_STOP_CHARGE, queryTokenParms, true);
+        JsonNode jsonObject = chargingUtil.chargingRequest(ConnectivityConstants.TEST_DOMAIN + ConnectivityConstants.QUERY_STOP_CHARGE, queryTokenParms, true);
         log.info("停止充电返回结果:{}", jsonObject);
-        JsonObject responseDecode = chargingUtil.responseDecode(jsonObject);
+        JsonNode responseDecode = chargingUtil.responseDecode(jsonObject);
         log.info("停止充电返回结果解密后:{}", responseDecode);
-        return new Gson().fromJson(responseDecode, StopChargingOperationResponseVO.class);
+        return objectMapper.readValue(responseDecode.toString(), StopChargingOperationResponseVO.class);
     }
 }

+ 12 - 10
src/main/java/com/zsElectric/boot/charging/service/impl/ChargingReceptionServiceImpl.java

@@ -1,6 +1,6 @@
 package com.zsElectric.boot.charging.service.impl;
 
-import com.google.gson.Gson;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zsElectric.boot.charging.service.ChargingReceptionService;
 import com.zsElectric.boot.charging.vo.*;
 import com.zsElectric.boot.common.constant.ConnectivityConstants;
@@ -27,6 +27,8 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
 
     private final ChargingUtil chargingUtil;
 
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
     @Override
     public ResponseParmsEntity chargeResponse(RequestParmsEntity requestDTO) {
         log.info("接收推送启动充电结果请求参数:{}", requestDTO);
@@ -40,14 +42,14 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
             if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
                 String decryptData = chargingUtil.decryptData(requestDTO.getData());
                 log.info("解密后的数据:{}", decryptData);
-                chargingStatusResponseVO = new Gson().fromJson(decryptData, ChargingStatusResponseVO.class);
+                chargingStatusResponseVO = objectMapper.readValue(decryptData, ChargingStatusResponseVO.class);
                 //todo 业务代码待处理
 
 
                 chargeResponseVO.setStartChargeSeq(chargingStatusResponseVO.getStartChargeSeq());
                 chargeResponseVO.setSuccStat(STATUS_OK);
                 chargeResponseVO.setFailReason(FAIL_REASON_NONE);
-                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                encryptData = chargingUtil.encryptData(objectMapper.writeValueAsString(chargeResponseVO));
                 genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
             }else {
                 log.error("数据验签失败");
@@ -78,7 +80,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
             if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
                 String decryptData = chargingUtil.decryptData(requestDTO.getData());
                 log.info("解密后的数据:{}", decryptData);
-                equipChargeStatusResponseVO = new Gson().fromJson(decryptData, EquipChargeStatusResponseVO.class);
+                equipChargeStatusResponseVO = objectMapper.readValue(decryptData, EquipChargeStatusResponseVO.class);
                 //todo 业务代码待处理
 
 
@@ -86,7 +88,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
                 chargeResponseVO.setStartChargeSeq(equipChargeStatusResponseVO.getStartChargeSeq());
                 chargeResponseVO.setSuccStat(STATUS_OK);
                 chargeResponseVO.setFailReason(FAIL_REASON_NONE);
-                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                encryptData = chargingUtil.encryptData(objectMapper.writeValueAsString(chargeResponseVO));
                 genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
             }else {
                 log.error("数据验签失败");
@@ -118,14 +120,14 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
             if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
                 String decryptData = chargingUtil.decryptData(requestDTO.getData());
                 log.info("解密后的数据:{}", decryptData);
-                stopChargingResponseVO = new Gson().fromJson(decryptData, StopChargingResponseVO.class);
+                stopChargingResponseVO = objectMapper.readValue(decryptData, StopChargingResponseVO.class);
                 //todo 业务代码待处理
 
 
                 chargeResponseVO.setStartChargeSeq(stopChargingResponseVO.getStartChargeSeq());
                 chargeResponseVO.setSuccStat(STATUS_OK);
                 chargeResponseVO.setFailReason(FAIL_REASON_NONE);
-                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                encryptData = chargingUtil.encryptData(objectMapper.writeValueAsString(chargeResponseVO));
                 genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
             }else {
                 log.error("数据验签失败");
@@ -157,14 +159,14 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
             if(verify(data, ConnectivityConstants.SIG_SECRET, requestDTO.getSig())){
                 String decryptData = chargingUtil.decryptData(requestDTO.getData());
                 log.info("解密后的数据:{}", decryptData);
-                chargingOrderVO = new Gson().fromJson(decryptData, ChargingOrderVO.class);
+                chargingOrderVO = objectMapper.readValue(decryptData, ChargingOrderVO.class);
                 //todo 业务代码待处理
 
 
                 chargeResponseVO.setStartChargeSeq(chargingOrderVO.getStartChargeSeq());
                 chargeResponseVO.setSuccStat(STATUS_OK);
                 chargeResponseVO.setFailReason(FAIL_REASON_NONE);
-                encryptData = chargingUtil.encryptData(new Gson().toJson(chargeResponseVO));
+                encryptData = chargingUtil.encryptData(objectMapper.writeValueAsString(chargeResponseVO));
                 genSign = genSign(STATUS_OK, "请求成功", encryptData, ConnectivityConstants.SIG_SECRET);
             }else {
                 log.error("数据验签失败");
@@ -199,7 +201,7 @@ public class ChargingReceptionServiceImpl implements ChargingReceptionService {
 
                 Map<String, Integer> statusMap = new HashMap<>();
                 statusMap.put("Status", 0);
-                encryptData = chargingUtil.encryptData(new Gson().toJson(statusMap));
+                encryptData = chargingUtil.encryptData(objectMapper.writeValueAsString(statusMap));
                 genSign = genSign(STATUS_OK, "", encryptData, ConnectivityConstants.SIG_SECRET);
 
                 responseParmsEntity.setRet(STATUS_OK);

+ 14 - 13
src/main/java/com/zsElectric/boot/common/util/OkHttpUtil.java

@@ -2,8 +2,8 @@ package com.zsElectric.boot.common.util;
 
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.JsonNode;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.*;
 import org.springframework.stereotype.Component;
@@ -16,6 +16,7 @@ import java.util.Map;
 @Component
 public class OkHttpUtil {
     private final OkHttpClient okHttpClient;
+    private static final ObjectMapper objectMapper = new ObjectMapper();
     
     private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
 
@@ -24,9 +25,9 @@ public class OkHttpUtil {
     }
 
     /**
-     * 执行 GET 请求,返回 JsonObject
+     * 执行 GET 请求,返回 JsonNode
      */
-    public JsonObject doGet(String url, Map<String, String> headers) throws IOException {
+    public JsonNode doGet(String url, Map<String, String> headers) throws IOException {
         Request.Builder requestBuilder = new Request.Builder().url(url);
 
         if (headers != null) {
@@ -40,14 +41,14 @@ public class OkHttpUtil {
                 throw new IOException("Unexpected code: " + response);
             }
             String responseBody = response.body().string();
-            return JsonParser.parseString(responseBody).getAsJsonObject();
+            return objectMapper.readTree(responseBody);
         }
     }
 
     /**
-     * 执行 POST 请求(JSON 数据),返回 JsonObject
+     * 执行 POST 请求(JSON 数据),返回 JsonNode
      */
-    public JsonObject doPostJson(String url, String json, Map<String, String> headers) throws IOException {
+    public JsonNode doPostJson(String url, String json, Map<String, String> headers) throws IOException {
         RequestBody body = RequestBody.create(json, JSON);
 
         Request.Builder requestBuilder = new Request.Builder()
@@ -65,14 +66,14 @@ public class OkHttpUtil {
                 throw new IOException("Unexpected code: " + response);
             }
             String responseBody = response.body().string();
-            return JsonParser.parseString(responseBody).getAsJsonObject();
+            return objectMapper.readTree(responseBody);
         }
     }
 
     /**
-     * 执行 POST 请求(表单数据),返回 JsonObject
+     * 执行 POST 请求(表单数据),返回 JsonNode
      */
-    public JsonObject doPostForm(String url, String json, Map<String, String> headers) {
+    public JsonNode doPostForm(String url, String json, Map<String, String> headers) {
         try {
             RequestBody body = RequestBody.create(json, JSON);
 
@@ -98,14 +99,14 @@ public class OkHttpUtil {
             String responseBody = response.body().string();
             log.info("HTTP 请求成功,URL: {}, 响应: {}", url, responseBody);
             response.close();
-            return JsonParser.parseString(responseBody).getAsJsonObject();
+            return objectMapper.readTree(responseBody);
         } catch (IOException e) {
             log.error("HTTP 请求异常,URL: {}", url, e);
             throw new RuntimeException("请求异常: " + e.getMessage(), e);
         }
     }
 
-    public JsonObject doPostForm(String url, Map<String, Object> formData, Map<String, String> headers) {
+    public JsonNode doPostForm(String url, Map<String, Object> formData, Map<String, String> headers) {
         try {
             FormBody.Builder formBodyBuilder = new FormBody.Builder();
             if (formData != null) {
@@ -133,7 +134,7 @@ public class OkHttpUtil {
             String responseBody = response.body().string();
             log.info("HTTP 请求成功,URL: {}, 响应: {}", url, responseBody);
             response.close();
-            return JsonParser.parseString(responseBody).getAsJsonObject();
+            return objectMapper.readTree(responseBody);
         } catch (IOException e) {
             log.error("HTTP 请求异常,URL: {}", url, e);
             throw new RuntimeException("请求异常: " + e.getMessage(), e);

+ 11 - 10
src/main/java/com/zsElectric/boot/common/util/electric/ChargingUtil.java

@@ -1,8 +1,8 @@
 package com.zsElectric.boot.common.util.electric;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.zsElectric.boot.common.constant.ConnectivityConstants;
 import com.zsElectric.boot.common.util.AESCryptoUtils;
 import com.zsElectric.boot.common.util.HmacMD5Util;
@@ -20,6 +20,8 @@ import java.util.Objects;
 @Component
 public class ChargingUtil {
 
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
     @Resource
     private ElectricTokenManager tokenManager;
     @Resource
@@ -32,7 +34,7 @@ public class ChargingUtil {
      * @param tokenRequired
      * @return
      */
-    public JsonObject chargingRequest(String url, Map<String,Object> queryParms,boolean tokenRequired){
+    public JsonNode chargingRequest(String url, Map<String,Object> queryParms,boolean tokenRequired){
         Map<String, String> headers = new HashMap<>();
         if(tokenRequired){
             headers.put("Authorization", "Bearer " + tokenManager.getValidAccessToken());
@@ -42,7 +44,7 @@ public class ChargingUtil {
             SequenceGenUtil.SequenceResult result = SequenceGenUtil.generate();
 
             requestParms.setOperatorID(ConnectivityConstants.OPERATOR_ID);
-            requestParms.setData(AESCryptoUtils.encrypt(new Gson().toJson(queryParms),ConnectivityConstants.PLATFORM_DATA_SECRET,
+            requestParms.setData(AESCryptoUtils.encrypt(objectMapper.writeValueAsString(queryParms),ConnectivityConstants.PLATFORM_DATA_SECRET,
                             ConnectivityConstants.PLATFORM_DATA_SECRET_IV));
             requestParms.setTimeStamp(result.getTimestamp());
             requestParms .setSeq(result.getSequence());
@@ -50,9 +52,9 @@ public class ChargingUtil {
                             requestParms.getTimeStamp(),
                             requestParms.getSeq(),ConnectivityConstants.PLATFORM_SIG_SECRET));
 
-            String requestJson = new Gson().toJson(requestParms);
+            String requestJson = objectMapper.writeValueAsString(requestParms);
             log.info("调用第三方接口,URL: {}, 请求参数: {}", url, requestJson);
-            JsonObject response = okHttpUtil.doPostForm(url, requestJson, headers);
+            JsonNode response = okHttpUtil.doPostForm(url, requestJson, headers);
 
             if (Objects.isNull(response)) {
                 log.error("调用第三方接口返回为空,URL: {}", url);
@@ -71,15 +73,14 @@ public class ChargingUtil {
      * @param response
      * @return
      */
-    public JsonObject responseDecode(JsonObject response){
+    public JsonNode responseDecode(JsonNode response){
 
         try {
             if (Objects.isNull(response)) {
                 log.error("第三方接口响应数据为空");
                 return null;
              }
-            Gson gson = new Gson();
-            ResponseParmsEntity responseParms = gson.fromJson(response, ResponseParmsEntity.class);
+            ResponseParmsEntity responseParms = objectMapper.readValue(response.toString(), ResponseParmsEntity.class);
             String data = responseParms.getRet() + responseParms.getMsg() + responseParms.getData();
             boolean verify = HmacMD5Util.verify(data, ConnectivityConstants.PLATFORM_SIG_SECRET, responseParms.getSig());
             if (!verify) {
@@ -110,7 +111,7 @@ public class ChargingUtil {
             }
             String decodeData = AESCryptoUtils.decrypt(responseParms.getData(), ConnectivityConstants.PLATFORM_DATA_SECRET,
                     ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
-            return gson.fromJson(decodeData, JsonObject.class);
+            return objectMapper.readTree(decodeData);
         }catch (Exception e){
             throw new RuntimeException("第三方接口响应发生异常", e);
         }

+ 9 - 8
src/main/java/com/zsElectric/boot/common/util/electric/ElectricTokenManager.java

@@ -1,8 +1,8 @@
 package com.zsElectric.boot.common.util.electric;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.JsonNode;
 import com.zsElectric.boot.common.constant.ConnectivityConstants;
 import com.zsElectric.boot.common.util.AESCryptoUtils;
 import com.zsElectric.boot.common.util.HmacMD5Util;
@@ -28,6 +28,8 @@ import java.util.concurrent.locks.ReentrantLock;
 @RequiredArgsConstructor
 public class ElectricTokenManager {
 
+    private final ObjectMapper objectMapper = new ObjectMapper();
+
     @Resource
     private OkHttpUtil okHttpUtil;
 
@@ -167,7 +169,7 @@ public class ElectricTokenManager {
                     .setOperatorID(ConnectivityConstants.OPERATOR_ID);
             
             // 加密Data字段
-            String dataToEncrypt = new Gson().toJson(queryTokenParms);
+            String dataToEncrypt = objectMapper.writeValueAsString(queryTokenParms);
             log.info("待加密的Data: {}", dataToEncrypt);
             String encryptedData = AESCryptoUtils.encrypt(dataToEncrypt, ConnectivityConstants.PLATFORM_DATA_SECRET,
                     ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
@@ -187,10 +189,10 @@ public class ElectricTokenManager {
             log.info("调用第三方接口获取Token,URL: {}", requestUrl);
             
             // 直接将请求对象序列化为JSON字符串,确保大驼峰命名
-            String requestJson = new Gson().toJson(requestParms);
+            String requestJson = objectMapper.writeValueAsString(requestParms);
             log.info("请求参数JSON: {}", requestJson);
             
-            JsonObject response = okHttpUtil.doPostForm(requestUrl, requestJson, null);
+            JsonNode response = okHttpUtil.doPostForm(requestUrl, requestJson, null);
 
             if (Objects.isNull(response)) {
                 log.error("调用第三方接口获取Token失败,响应为空");
@@ -198,8 +200,7 @@ public class ElectricTokenManager {
             }
             log.info("第三方接口响应: {}", response);
 
-            Gson gson = new Gson();
-            ResponseParmsEntity responseParms = gson.fromJson(response, ResponseParmsEntity.class);
+            ResponseParmsEntity responseParms = objectMapper.readValue(response.toString(), ResponseParmsEntity.class);
             
             if (Objects.isNull(responseParms)) {
                 log.error("解析响应失败,responseParms为null,原始响应: {}", response);
@@ -245,7 +246,7 @@ public class ElectricTokenManager {
                     ConnectivityConstants.PLATFORM_DATA_SECRET_IV);
             log.info("解密后的数据: {}", decodeData);
             
-            QueryTokenResponseData responseData = gson.fromJson(decodeData, QueryTokenResponseData.class);
+            QueryTokenResponseData responseData = objectMapper.readValue(decodeData, QueryTokenResponseData.class);
             
             if (Objects.isNull(responseData)) {
                 log.error("解析解密数据失败,responseData为null,解密数据: {}", decodeData);

+ 5 - 3
src/main/java/com/zsElectric/boot/common/util/electric/QueryTokenParms.java

@@ -1,6 +1,7 @@
 package com.zsElectric.boot.common.util.electric;
 
-import com.google.gson.annotations.SerializedName;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.ToString;
 import lombok.experimental.Accessors;
@@ -11,6 +12,7 @@ import java.io.Serializable;
 @Data
 @Accessors(chain = true)
 @ToString
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE)
 public class QueryTokenParms implements Serializable {
 
     @Serial
@@ -19,12 +21,12 @@ public class QueryTokenParms implements Serializable {
     /**
      * 运营商ID
      */
-    @SerializedName("OperatorID")
+    @JsonProperty("OperatorID")
     private String OperatorID;
 
     /**
      * 运营商密钥
      */
-    @SerializedName("OperatorSecret")
+    @JsonProperty("OperatorSecret")
     private String OperatorSecret;
 }

+ 8 - 6
src/main/java/com/zsElectric/boot/common/util/electric/QueryTokenResponseData.java

@@ -1,12 +1,14 @@
 package com.zsElectric.boot.common.util.electric;
 
-import com.google.gson.annotations.SerializedName;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
 
 @Data
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE)
 public class QueryTokenResponseData implements Serializable {
 
     @Serial
@@ -15,31 +17,31 @@ public class QueryTokenResponseData implements Serializable {
     /**
      * 运营商ID
      */
-    @SerializedName("OperatorID")
+    @JsonProperty("OperatorID")
     private String OperatorID;
 
     /**
      * 响应状态 0-成功,1-失败
      */
-    @SerializedName("SuccStat")
+    @JsonProperty("SuccStat")
     private Integer SuccStat;
 
     /**
      * 访问令牌
      */
-    @SerializedName("AccessToken")
+    @JsonProperty("AccessToken")
     private String AccessToken;
 
     /**
      * 令牌有效期,单位秒
      */
-    @SerializedName("TokenAvailableTime")
+    @JsonProperty("TokenAvailableTime")
     private Integer TokenAvailableTime;
 
     /**
      * 错误原因 0-无,1-OperatorID无效
      */
-    @SerializedName("FailReason")
+    @JsonProperty("FailReason")
     private Integer FailReason;
 
 }

+ 3 - 47
src/main/java/com/zsElectric/boot/common/util/electric/RequestParmsEntity.java

@@ -1,7 +1,8 @@
 package com.zsElectric.boot.common.util.electric;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.gson.annotations.SerializedName;
+
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -15,6 +16,7 @@ import java.io.Serializable;
  */
 @Data
 @Accessors(chain = true)
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE)
 public class RequestParmsEntity implements Serializable {
 
     @Serial
@@ -23,76 +25,30 @@ public class RequestParmsEntity implements Serializable {
     /**
      * 运营商标识
      */
-    @SerializedName("OperatorID")
     @JsonProperty("OperatorID")
     private String OperatorID;
 
     /**
      * 加密后的参数
      */
-    @SerializedName("Data")
     @JsonProperty("Data")
     private String Data;
 
     /**
      * 时间戳
      */
-    @SerializedName("TimeStamp")
     @JsonProperty("TimeStamp")
     private String TimeStamp;
 
     /**
      * 序列号
      */
-    @SerializedName("Seq")
     @JsonProperty("Seq")
     private String Seq;
 
     /**
      * 签名
      */
-    @SerializedName("Sig")
     @JsonProperty("Sig")
     private String Sig;
-
-    public String getOperatorID() {
-        return OperatorID;
-    }
-
-    public void setOperatorID(String operatorID) {
-        OperatorID = operatorID;
-    }
-
-    public String getData() {
-        return Data;
-    }
-
-    public void setData(String data) {
-        Data = data;
-    }
-
-    public String getTimeStamp() {
-        return TimeStamp;
-    }
-
-    public void setTimeStamp(String timeStamp) {
-        TimeStamp = timeStamp;
-    }
-
-    public String getSeq() {
-        return Seq;
-    }
-
-    public void setSeq(String seq) {
-        Seq = seq;
-    }
-
-    public String getSig() {
-        return Sig;
-    }
-
-    public void setSig(String sig) {
-        Sig = sig;
-    }
-
 }

+ 4 - 33
src/main/java/com/zsElectric/boot/common/util/electric/ResponseParmsEntity.java

@@ -1,10 +1,14 @@
 package com.zsElectric.boot.common.util.electric;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
 
+@Data
+@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.NONE, setterVisibility = JsonAutoDetect.Visibility.NONE)
 public class ResponseParmsEntity implements Serializable {
 
     @Serial
@@ -19,7 +23,6 @@ public class ResponseParmsEntity implements Serializable {
      * 4003:参数不合法,缺少必需的示例:OperatorID、Sig、TimeStamp、Data、Seq五个参数
      * 4004:请求的业务参数不合法,各接口定义自己的必须参数
      * 500:系统异常
-     *
      */
     @JsonProperty("Ret")
     private Integer Ret;
@@ -41,36 +44,4 @@ public class ResponseParmsEntity implements Serializable {
      */
     @JsonProperty("Sig")
     private String Sig;
-
-    public Integer getRet() {
-        return Ret;
-    }
-
-    public void setRet(Integer ret) {
-        Ret = ret;
-    }
-
-    public String getMsg() {
-        return Msg;
-    }
-
-    public void setMsg(String msg) {
-        Msg = msg;
-    }
-
-    public String getData() {
-        return Data;
-    }
-
-    public void setData(String data) {
-        Data = data;
-    }
-
-    public String getSig() {
-        return Sig;
-    }
-
-    public void setSig(String sig) {
-        Sig = sig;
-    }
 }

+ 3 - 2
src/main/java/com/zsElectric/boot/common/util/electric/queryToken/JwtAuthenticationEntryPoint.java

@@ -1,6 +1,6 @@
 package com.zsElectric.boot.common.util.electric.queryToken;
 
-import com.google.gson.Gson;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import org.springframework.http.MediaType;
@@ -24,6 +24,7 @@ public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
         error.put("Ret", 401);
         error.put("Msg", authException.getMessage());
         error.put("Path", request.getRequestURI());
-        new Gson().toJson(error, response.getWriter());
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.writeValue(response.getWriter(), error);
     }
 }