Я использую Jackson, с Spring MVC, чтобы выписать некоторые простые объекты как JSON. Один из объектов имеет свойство amount типа Double. (Я знаю, что Double не следует использовать в качестве денежной суммы. Однако это не мой код.)
В выводе JSON я хотел бы ограничить сумму до двух знаков после запятой. В настоящее время это показано как:
"amount":459.99999999999994
Я пробовал использовать аннотацию Spring 3 @NumberFormat, но не добился успеха в этом направлении. Похоже, что у других тоже были проблемы: MappingJacksonHttpMessageConverter ObjectMapper не использует ConversionService при привязке описания JSON к JavaBean propertiesenter здесь.
Кроме того, я попытался использовать аннотацию @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 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 ". Однако может ли кто-нибудь предложить любой другой более простой (или более стандартный) способ сделать это.