Serializuj Double do 2 miejsc po przecinku za pomocą Jacksona

używamJackson, zSpring MVC, aby napisać kilka prostych obiektów jakoJSON. Jeden z obiektów maamount własność typuDouble. (Wiem toDouble nie należy używać jako kwoty pieniężnej. Jednak to nie jest mój kod.)

wJSON wyjście, chciałbym ograniczyć kwotę do 2 miejsc po przecinku. Obecnie jest wyświetlany jako:

"amount":459.99999999999994

Próbowałem użyć Spring 3@NumberFormat adnotacja, ale nie odniosła sukcesu w tym kierunku. Wygląda na to, że inni też mieli problemy:Mapowanie ObjectMapperJacksonHttpMessageConverter nie używa usługi ConversionService podczas wiązania JSON do opisu linku propertiesenter JavaBean tutaj.

Próbowałem również użyć@JsonSerialize adnotacja z niestandardowym serializatorem.
W modelu:

@JsonSerialize(using = CustomDoubleSerializer.class)
public Double getAmount()

I implementacja serializatora:

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);
        }
    }
}

TheCustomDoubleSerializer „pojawia się” do pracy. Jednak czy ktoś może zasugerować inny prostszy (lub bardziej standardowy) sposób tego.

questionAnswers(4)

yourAnswerToTheQuestion