I'm using Jackson
, with Spring MVC
, to write out some simple objects as JSON
. One of the objects, has an amount
property, of type Double
. (I know that Double
should not be used as a monetary amount. However, this is not my code.)
In the JSON
output, I'd like to restrict the amount to 2 decimal places. Currently it is shown as:
"amount":459.99999999999994
I've tried using Spring 3's @NumberFormat
annotation, but haven't had success in that direction. Looks like others had issues too: MappingJacksonHttpMessageConverter's ObjectMapper does not use ConversionService when binding JSON to JavaBean propertiesenter link description here.
Also, I tried using the @JsonSerialize
annotation, with a custom serializer.
In the model:
@JsonSerialize(using = CustomDoubleSerializer.class)
public Double getAmount()
And serializer implementation:
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);
}
}
}
The CustomDoubleSerializer
"appears" to work. However, can anyone suggest any other simpler (or more standard) way of doing this.
question from:
https://stackoverflow.com/questions/11520781/serialize-a-double-to-2-decimal-places-using-jackson 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…