我正在使用Jackson
, with Spring MVC
, 将一些简单的对象写成JSON
. 其中一个对象具有amount
类型的属性Double
。(我知道不Double
应该将其用作货币金额。但是,这不是我的代码。)
在JSON
输出中,我想将金额限制为小数点后 2 位。目前显示为:
"amount":459.99999999999994
我试过使用 Spring 3 的@NumberFormat
注释,但在那个方向上没有成功。看起来其他人也有问题:MappingJacksonHttpMessageConverter's ObjectMapper does not use ConversionService when binding JSON to JavaBean propertiesenter link description here。
此外,我尝试使用@JsonSerialize
带有自定义序列化程序的注释。
在模型中:
@JsonSerialize(using = CustomDoubleSerializer.class)
public Double getAmount()
和序列化器实现:
public class CustomDoubleSerializer extends JsonSerializer<Double> {
@Override
public void serialize(Double value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonGenerationException {
if (null == value) {
//write the word 'null' if there's no value available
jgen.writeNull();
} else {
final String pattern = ".##";
//final String pattern = "###,###,##0.00";
final DecimalFormat myFormatter = new DecimalFormat(pattern);
final String output = myFormatter.format(value);
jgen.writeNumber(output);
}
}
}
“CustomDoubleSerializer
似乎”工作。但是,任何人都可以建议任何其他更简单(或更标准)的方式来做到这一点。