Просмотр исходного кода

fix(backend): ProductSkuDTO specs类型从List<Map>改为Map<String,String>

specs在DB中存储为JSON对象(DTO.from()解析为对象),与DTO字段类型一致。修复从库读取时List<Map>解析JSON对象失败的Bug。

Ultraworked with Sisyphus

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Sisyphus 3 месяцев назад
Родитель
Сommit
1601f7647e
1 измененных файлов с 11 добавлено и 6 удалено
  1. 11 6
      cfc-backend/src/main/java/com/etotem/cfc/dto/ProductSkuDTO.java

+ 11 - 6
cfc-backend/src/main/java/com/etotem/cfc/dto/ProductSkuDTO.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.TypeReference;
 import com.etotem.cfc.entity.ProductSku;
 import lombok.Data;
 import java.math.BigDecimal;
-import java.util.List;
 import java.util.Map;
 
 @Data
@@ -13,7 +12,7 @@ public class ProductSkuDTO {
     private Long id;
     private Long productId;
     private String skuCode;
-    private List<Map<String, String>> specs;
+    private Map<String, String> specs;
     private BigDecimal price;
     private BigDecimal originalPrice;
     private Integer stock;
@@ -31,12 +30,18 @@ public class ProductSkuDTO {
         dto.setStock(sku.getStock());
         dto.setImage(sku.getImage());
         dto.setEnabled(sku.getEnabled() != null && sku.getEnabled() == 1);
-        // Parse specs JSON to List<Map>
+        // Parse specs JSON to Map (stored as JSON object in DB)
         if (sku.getSpecs() != null) {
             try {
-                List<Map<String, String>> specsList = JSON.parseObject(sku.getSpecs().toString(),
-                    new TypeReference<List<Map<String, String>>>() {});
-                dto.setSpecs(specsList);
+                String specsStr;
+                if (sku.getSpecs() instanceof String) {
+                    specsStr = (String) sku.getSpecs();
+                } else {
+                    specsStr = JSON.toJSONString(sku.getSpecs());
+                }
+                Map<String, String> specsMap = JSON.parseObject(specsStr,
+                    new TypeReference<Map<String, String>>() {});
+                dto.setSpecs(specsMap);
             } catch (Exception e) {
                 dto.setSpecs(null);
             }