jackson序列化BigDecimal时保留小数 - 代码先锋网

com.fasterxml.jackson包是Spring Boot默认的对象序列化JSON的工具,功能强大,包下有很多便捷的注解,用于处理Controller的各种入、出参数。本文介绍下BigDecimal类型小数的保留,代码如下。

JsonDeserializer用于出参:

import com.fasterxml.jackson.core.JsonParser;import com.fasterxml.jackson.databind.DeserializationContext;import com.fasterxml.jackson.databind.JsonDeserializer; import java.io.IOException;import java.math.BigDecimal;import java.math.RoundingMode;import java.util.Objects; /** * 出参保留两位小数 */public class DataDeserializerBigDecimal extends JsonDeserializer<BigDecimal> {     /**     * 出参保留两位小数     * @param jsonParser     * @param deserializationContext     * @return     * @throws IOException     */    @Override    public BigDecimal deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {        if (Objects.isNull(jsonParser.getDecimalValue())) {            return null;        } else {            // 这里取floor            return jsonParser.getDecimalValue().setScale(2, RoundingMode.FLOOR);        }    }}

 JsonSerializer用于入参:

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.util.Objects; /** * 入参保留两位小数 */public class SerializerBigDecimal extends JsonSerializer<BigDecimal> {    @Override    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {        if(Objects.isNull(value)) {            gen.writeNull();        } else {            // 这里取floor            gen.writeNumber(value.setScale(2, RoundingMode.FLOOR));        }    }}

要json序列化的对象示例:

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;import com.fasterxml.jackson.databind.annotation.JsonSerialize;import lombok.Data; import java.math.BigDecimal; /** * 测试DTO */@Datapublic class TestDTO {     /**     * com.fasterxml.jackson 处理BigDecimal时保留2位小数     */    @JsonDeserialize(using = DeserializerBigDecimal.class)    @JsonSerialize(using = SerializerBigDecimal.class)    private BigDecimal number;}

原网址: 访问
创建于: 2021-10-26 19:18:15
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论