1. <legend id='K6paS'><style id='K6paS'><dir id='K6paS'><q id='K6paS'></q></dir></style></legend>

        <bdo id='K6paS'></bdo><ul id='K6paS'></ul>
      <i id='K6paS'><tr id='K6paS'><dt id='K6paS'><q id='K6paS'><span id='K6paS'><b id='K6paS'><form id='K6paS'><ins id='K6paS'></ins><ul id='K6paS'></ul><sub id='K6paS'></sub></form><legend id='K6paS'></legend><bdo id='K6paS'><pre id='K6paS'><center id='K6paS'></center></pre></bdo></b><th id='K6paS'></th></span></q></dt></tr></i><div id='K6paS'><tfoot id='K6paS'></tfoot><dl id='K6paS'><fieldset id='K6paS'></fieldset></dl></div>
    2. <tfoot id='K6paS'></tfoot>

      1. <small id='K6paS'></small><noframes id='K6paS'>

      2. jackson使用@JsonSerialize格式化BigDecimal解决.00不显示问题

        时间:2023-12-11
        • <legend id='6Xitj'><style id='6Xitj'><dir id='6Xitj'><q id='6Xitj'></q></dir></style></legend>

            <small id='6Xitj'></small><noframes id='6Xitj'>

            • <bdo id='6Xitj'></bdo><ul id='6Xitj'></ul>

              <i id='6Xitj'><tr id='6Xitj'><dt id='6Xitj'><q id='6Xitj'><span id='6Xitj'><b id='6Xitj'><form id='6Xitj'><ins id='6Xitj'></ins><ul id='6Xitj'></ul><sub id='6Xitj'></sub></form><legend id='6Xitj'></legend><bdo id='6Xitj'><pre id='6Xitj'><center id='6Xitj'></center></pre></bdo></b><th id='6Xitj'></th></span></q></dt></tr></i><div id='6Xitj'><tfoot id='6Xitj'></tfoot><dl id='6Xitj'><fieldset id='6Xitj'></fieldset></dl></div>
                <tbody id='6Xitj'></tbody>

              1. <tfoot id='6Xitj'></tfoot>

                  当使用jackson序列化BigDecimal时,有时候会出现数字后的.00不显示的问题,这是因为jackson默认会去掉BigDecimal末尾的0,为了解决这个问题,我们可以使用@JsonSerialize注解指定一个自定义的格式化器。

                  下面是格式化BigDecimal的示例代码:

                  首先,我们需要定义一个自定义的格式化器,这里使用了DecimalFormat的格式化方式,保留两位小数,并强制显示末尾的0:

                  import com.fasterxml.jackson.core.JsonGenerator;
                  import com.fasterxml.jackson.databind.JsonSerializer;
                  import com.fasterxml.jackson.databind.SerializerProvider;
                  
                  import java.io.IOException;
                  import java.math.BigDecimal;
                  import java.math.RoundingMode;
                  import java.text.DecimalFormat;
                  
                  public class BigDecimalSerialize extends JsonSerializer<BigDecimal> {
                  
                      private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.00");
                  
                      @Override
                      public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
                          if (value == null) {
                              gen.writeNull();
                          } else {
                              BigDecimal formatNum = value.setScale(2, RoundingMode.DOWN);
                              String formattedValue = DECIMAL_FORMAT.format(formatNum);
                              gen.writeString(formattedValue);
                          }
                      }
                  }
                  

                  接下来,我们需要在需要格式化的BigDecimal变量上使用@JsonSerialize注解,指定我们定义的自定义格式化器:

                  import com.fasterxml.jackson.databind.annotation.JsonSerialize;
                  
                  import java.math.BigDecimal;
                  
                  public class Order {
                      private String orderNo;
                      @JsonSerialize(using = BigDecimalSerialize.class)
                      private BigDecimal totalPrice;
                  
                      // 省略getter、setter方法
                  }
                  

                  此时,当使用jackson序列化Order类时,totalPrice的值将会被格式化成指定的格式,并且末尾的.00也会显示出来。

                  示例1,创建一个Order对象,totalPrice为BigDecimal类型,并赋值为9.00:

                  Order order = new Order();
                  order.setOrderNo("2019070101");
                  order.setTotalPrice(new BigDecimal("9.00"));
                  

                  如果不使用自定义的格式化器,使用jackson的默认处理方式序列化Order对象,那么totalPrice将被显示为9,而不是9.00。

                  示例2,创建一个Order对象,totalPrice为BigDecimal类型,并赋值为9.005:

                  Order order = new Order();
                  order.setOrderNo("2019070101");
                  order.setTotalPrice(new BigDecimal("9.005"));
                  

                  使用自定义的格式化器,将totalPrice的值格式化后序列化成JSON字符串,结果为:

                  {
                    "orderNo": "2019070101",
                    "totalPrice": "9.01"
                  }
                  

                  可以看到,totalPrice的值被保留了两位小数,并显示了末尾的0。

                  上一篇:JSON创建键值对(key是中文或者数字)方式详解 下一篇:SpringMvc后台接收json数据中文乱码问题详解

                  相关文章

                  <legend id='q5QBu'><style id='q5QBu'><dir id='q5QBu'><q id='q5QBu'></q></dir></style></legend>
                1. <tfoot id='q5QBu'></tfoot>

                        <bdo id='q5QBu'></bdo><ul id='q5QBu'></ul>

                      <small id='q5QBu'></small><noframes id='q5QBu'>

                      <i id='q5QBu'><tr id='q5QBu'><dt id='q5QBu'><q id='q5QBu'><span id='q5QBu'><b id='q5QBu'><form id='q5QBu'><ins id='q5QBu'></ins><ul id='q5QBu'></ul><sub id='q5QBu'></sub></form><legend id='q5QBu'></legend><bdo id='q5QBu'><pre id='q5QBu'><center id='q5QBu'></center></pre></bdo></b><th id='q5QBu'></th></span></q></dt></tr></i><div id='q5QBu'><tfoot id='q5QBu'></tfoot><dl id='q5QBu'><fieldset id='q5QBu'></fieldset></dl></div>