Ver código fonte

fix: 新增InvoiceDetailBlueFapiaoTypeHandle,用TypeReference反序列化蓝票信息

原有JacksonTypeHandler默认parse()方法对FapiaoInfo内部类反序列化存在问题,
导致blueFapiao字段从DB读出后fapiao_code/fapiao_number为空。
参照已验证可行的InvoiceDetailBuyerInformationTypeHandle模式,
用getObjectMapper().readValue(json, new TypeReference<>(){})显式反序列化。

Co-Authored-By: Claude <noreply@anthropic.com>
skyline 1 mês atrás
pai
commit
f2088298e8

+ 2 - 1
entity/src/main/java/com/kym/entity/admin/InvoiceDetail.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.kym.entity.BaseEntity;
+import com.kym.entity.typehandle.InvoiceDetailBlueFapiaoTypeHandle;
 import com.kym.entity.typehandle.InvoiceDetailBuyerInformationTypeHandle;
 import com.kym.entity.typehandle.InvoiceDetailSellerInformationTypeHandle;
 import com.kym.entity.wechat.FaPiao;
@@ -52,7 +53,7 @@ public class InvoiceDetail extends BaseEntity {
     /**
      * 蓝票
      */
-    @TableField(typeHandler = JacksonTypeHandler.class)
+    @TableField(typeHandler = InvoiceDetailBlueFapiaoTypeHandle.class)
     private FapiaoApplications.FapiaoInfo blueFapiao;
 
     /**

+ 28 - 0
entity/src/main/java/com/kym/entity/typehandle/InvoiceDetailBlueFapiaoTypeHandle.java

@@ -0,0 +1,28 @@
+package com.kym.entity.typehandle;
+
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.kym.entity.wechat.FapiaoApplications;
+
+import java.io.IOException;
+
+/**
+ * 发票蓝票信息序列化处理,使用 TypeReference 确保 Jackson 正确反序列化内部类
+ *
+ * @author skyline
+ */
+public class InvoiceDetailBlueFapiaoTypeHandle extends JacksonTypeHandler {
+    public InvoiceDetailBlueFapiaoTypeHandle(Class<?> type) {
+        super(type);
+    }
+
+    @Override
+    public Object parse(String json) {
+        try {
+            return getObjectMapper().readValue(json, new TypeReference<FapiaoApplications.FapiaoInfo>() {
+            });
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}