ser*_*rah 1 java rest json jackson
我使用 jackson 和 spring 将 Java 序列化/反序列化为 JSON,反之亦然。
当 Jackson 将我的 Java 对象序列化为 JSON 时,十进制值为零的双精度值将被去除,而具有十进制值的双精度值将被考虑在内。例如:550.77 正确序列化为 550.77,而 440.00 则序列化为 440(等于整数)。
如何确保保留以 .00 作为十进制值的双精度序列化?
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.ANY, setterVisibility = Visibility.NONE)
public class Price extends DTO {
private static final long serialVersionUID = -3986616090347452845L;
private Double _exclVat;
private Double _inclVat;
public Price(){
super();
}
public Price(Double pExclVat, Double pInclVat) {
this();
_exclVat = pExclVat;
_inclVat = pInclVat;
}
public Double getExclVat() {
return _exclVat;
}
public void setExclVat(Double pExclVat) {
_exclVat = pExclVat;
}
public Double getInclVat() {
return _inclVat;
}
public void setInclVat(Double pInclVat) {
_inclVat = pInclVat;
}
}
Run Code Online (Sandbox Code Playgroud)
JSON格式
"price" : {
"excl_vat" : 250.0,
"incl_vat" : 208.33
}
Run Code Online (Sandbox Code Playgroud)
JSON 序列化时是否可以返回 250.00 而不是 250.0?
如果您确实需要精确两位小数,您可以尝试编写自己的数字序列化器,例如
public class DecimalJsonSerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeString( String.format("%.2f", value));
}
}
Run Code Online (Sandbox Code Playgroud)
然后用它来注释每个字段
@DecimalJsonSerializer(using=PriceJsonSerializer.class)
private Double _exclVat;
@DecimalJsonSerializer(using=PriceJsonSerializer.class)
private Double _inclVat;
Run Code Online (Sandbox Code Playgroud)
不需要定制解串器。默认解串器应该能够很好地处理以这种方式格式化的数字。
| 归档时间: |
|
| 查看次数: |
9017 次 |
| 最近记录: |