Я использую 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
". Однако может ли кто-нибудь предложить любой другой более простой (или более стандартный) способ сделать это.