使用序列化处理数据类型

场景:

在实体类数据返回时,对于BigDecimal类型的数据,页面接口返回是默认去除小数点位后的无效0,当需要保留两位小数时,可以使用序列化对BigDecimal类型序列化为json格式的字符串展示。

@JsonSerialize(using = CustomBigDecimalSerializer.class) 

public class RawmatWeighing extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    @Id
    @GeneratedValue(generator = "JDBC")
    @Column(name = "rawmat_weighing_id")
    private Long rawmatWeighingId;

    /**
     * 供方净重
     */
    @Column(name = "supplier_net_weight")
    @JsonSerialize(using = CustomBigDecimalSerializer.class)
    private BigDecimal supplierNetWeight;

    /**
     * 毛重
     */
    @Column(name = "gross_weight")
    @JsonSerialize(using = CustomBigDecimalSerializer.class)
    private BigDecimal grossWeight;
}
public class CustomBigDecimalSerializer extends JsonSerializer<BigDecimal> {

    @Override
    public void serialize(BigDecimal bigDecimal, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        //默认保留小数点后两位
        jsonGenerator.writeString(bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).toString());

    }
}

返回为字符串类型:

 总结:

CustomBigDecimalSerializer 类扩展了 Jackson 的 JsonSerializer<BigDecimal>,并重写了 serialize 方法。在这个方法中,BigDecimal 类型的值被格式化为保留小数点后两位的字符串,并写入到 JSON 中。

因此,当使用 Jackson 将包含 grossWeight 属性的对象序列化为 JSON 时,grossWeight 字段在 JSON 中的表示将是一个字符串(String 类型),该字符串是 BigDecimal 值格式化后的结果,保留小数点后两位。

例如,如果 grossWeight 的值是 123.456,那么序列化后的 JSON 中 grossWeight 字段的值将是 "123.46"(注意,这里使用了四舍五入到小数点后两位)。

总结来说,虽然 grossWeight 字段在 Java 实体类中是一个 BigDecimal 类型的属性,但在序列化为 JSON 后,它将以字符串的形式表示,且该字符串是 BigDecimal 值格式化后的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值