Jackson相关问题
1、json转dto的时候,dto不能定义isActive这种带有is的前缀,如果使用Lombok的Getter/Setter的话,json {"isActive": true},这样,将无法正确赋值。此时的dto再次转为json之后,得到的是active:false,因为字段不匹配。原因是jackson根据setter方法进行赋值。
private boolean isActive; //不推荐
private boolean active; //推荐
修改建议:
1)方法1:isActive改为:active(推荐方案)
2)方法2:手动写getter\setter方法为:
public boolean isActive() {
return isActive;
}
public void setIsActive(boolean active) {
isActive = active;
}
2、如果有3个double的类型,这样赋值:
@Getter
@Setter
@ToString
@EqualsAndHashCode
class SpecialValues {
private double infinityValue;
private double negativeInfinity;
private double notANumber;
}
SpecialValues specialValues = new SpecialValues();
specialValues.setInfinityValue(Double.POSITIVE_INFINITY);
specialValues.setNegativeInfinity(Double.NEGATIVE_INFINITY);
specialValues.setNotANumber(Double.NaN);
那么json格式化之后,会是这样的:
{"infinityValue":"Infinity","negativeInfinity":"-Infinity","notANumber":"NaN"}
注意,这个并不是数值类型,而是字符串类型了。
需要启用NaN字符串解析:
ObjectMapper mapper = new ObjectMapper()
.enable(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS); // 允许 Infinity/NaN