@JsonSerialize
@JsonSerialize注解,主要应用于数据转换,该注解作用在该属性的getter()方法上。
场景: id为Long类型时,数字长度超过19位传到前端就变了值 。精度丢失了。
解决办法:将Long类型转换成String类型,解决精度丢失。
注意:被转换的字段必须是包装类类型,否则会转换失败。
@JsonSerialize(using = ToStringSerializer.class)
private Long parentId; //转化成功
@JsonSerialize(using = ToStringSerializer.class)
private long parentId; //转化失败
场景:需要保留金额两位小数,四舍五入
解决办法:定义方法
@JsonSerialize(using = CustomDecimalSerialize.class)
private BigDecimal totalCom;
CustomDecimalSerialize
public class CustomDecimalSerialize extends JsonSerializer<BigDecimal> {
private DecimalFormat df = new DecimalFormat("0.00");
@Override
public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
if (value != null) {
df.setRoundingMode(RoundingMode.HALF_UP);
gen.writeString(df.format(value));
}
}
}
@JsonProperty("xxx")
用在属性上面,在序列化和反序列化时都将该属性识别为xxx
//序列化时将DATA_SOURCE映射成dataSource
@JsonProperty(value = "DATA_SOURCE")
private String dataSource;