Bläddra i källkod

BigDecimal序列化的时候使用toPlainString转换为字符串而不是toString

大数据与最优化研究所 6 månader sedan
förälder
incheckning
9d7773b631

+ 12 - 5
src/main/java/com/xjrsoft/config/JacksonConfig.java

@@ -9,10 +9,8 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
 import com.xjrsoft.common.handler.EasyExcelLocalDateTimeConverter;
@@ -53,7 +51,15 @@ public class JacksonConfig {
         return builder -> {
             builder.serializerByType(Long.class, ToStringSerializer.instance);
             builder.serializerByType(Long.TYPE, ToStringSerializer.instance);
-            builder.serializerByType(BigDecimal.class, ToStringSerializer.instance);
+
+            // 自定义 BigDecimal 序列化器,使用 toPlainString()
+            builder.serializerByType(BigDecimal.class, new JsonSerializer<BigDecimal>() {
+                @Override
+                public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
+                    gen.writeString(value.stripTrailingZeros().toPlainString());
+                }
+            });
+
             builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
             builder.serializerByType(INTERVALDS.class, intervalDSSerializer());
             builder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
@@ -143,4 +149,5 @@ public class JacksonConfig {
             }
         };
     }
+
 }

+ 5 - 5
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookIssueRecordServiceImpl.java

@@ -478,12 +478,12 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
                 data.add(vo.getIssn());
                 data.add(vo.getEditorInChief());
                 data.add(vo.getPublishingHouse());
-                data.add(ObjectUtils.isNotEmpty(vo.getPrice()) ? vo.getPrice().stripTrailingZeros().toString() : BigDecimal.ZERO.toString());
-                data.add(ObjectUtils.isNotEmpty(vo.getSubtotal()) ? vo.getSubtotal().stripTrailingZeros().toString() : BigDecimal.ZERO.toString());
+                data.add(ObjectUtils.isNotEmpty(vo.getPrice()) ? vo.getPrice().stripTrailingZeros().toPlainString() : BigDecimal.ZERO.toPlainString());
+                data.add(ObjectUtils.isNotEmpty(vo.getSubtotal()) ? vo.getSubtotal().stripTrailingZeros().toPlainString() : BigDecimal.ZERO.toPlainString());
                 if (ObjectUtils.isEmpty(vo.getSummation())) {
                     data.add("0");
                 } else {
-                    data.add(vo.getSummation().stripTrailingZeros().toString());
+                    data.add(vo.getSummation().stripTrailingZeros().toPlainString());
                 }
 
                 numMap = vo.getNumMap();
@@ -505,7 +505,7 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
                 data.add(vo.getIssueNumber() + "");
                 data.add(vo.getRecedeNumber() + "");
                 data.add(vo.getActualIssueNumber() + "");
-                data.add(ObjectUtils.isNotEmpty(vo.getActualTotalPrice()) ? vo.getActualTotalPrice().stripTrailingZeros().toString() : BigDecimal.ZERO.toString());
+                data.add(ObjectUtils.isNotEmpty(vo.getActualTotalPrice()) ? vo.getActualTotalPrice().stripTrailingZeros().toPlainString() : BigDecimal.ZERO.toPlainString());
                 data.add(vo.getRemark());
 
                 resultList.add(data);
@@ -583,7 +583,7 @@ public class TextbookIssueRecordServiceImpl extends MPJBaseServiceImpl<TextbookI
             totalSubtotalRowCell.setCellStyle(cellStyle);
 
             Cell totalPriceRowCell = totalSubtotalRow.createCell(eachImportConfigs.size() - 2);
-            totalPriceRowCell.setCellValue(totalPrice.stripTrailingZeros().toString());
+            totalPriceRowCell.setCellValue(totalPrice.stripTrailingZeros().toPlainString());
             totalPriceRowCell.setCellStyle(cellStyle);
 
             sheet.addMergedRegion(new CellRangeAddress(rowNumber, rowNumber, 0, 6));

+ 4 - 2
src/test/java/com/xjrsoft/xjrsoftboot/StringTest.java

@@ -4,6 +4,7 @@ import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.module.base.entity.BaseClass;
 import org.junit.jupiter.api.Test;
 
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -15,8 +16,9 @@ public class StringTest {
 
     @Test
     void test2(){
-
-        System.out.println(underscoreToCamel("create_user_id"));
+        BigDecimal bigDecimal = new BigDecimal("40001");
+        String str = bigDecimal.stripTrailingZeros().toString();
+        System.out.println(str); // 输出: 123.45
     }
 
     public static String underscoreToCamel(String input) {