Serializa un doble a 2 decimales usando Jackson
Estoy usandoJackson
, conSpring MVC
, escribir algunos objetos simples comoJSON
. Uno de los objetos, tiene unamount
propiedad, de tipoDouble
. (Yo sé esoDouble
No debe utilizarse como una cantidad monetaria. Sin embargo, este no es mi código.
En elJSON
De salida, me gustaría restringir la cantidad a 2 lugares decimales. Actualmente se muestra como:
"amount":459.99999999999994
He intentado usar Spring 3's@NumberFormat
anotación, pero no han tenido éxito en esa dirección. Parece que otros también tuvieron problemas:El ObjectMapper de MappingJacksonHttpMessageConverter no usa ConversionService cuando vincula JSON a JavaBean..
Además, traté de usar el@JsonSerialize
anotación, con un serializador personalizado.
En el modelo:
@JsonSerialize(using = CustomDoubleSerializer.class)
public Double getAmount()
Y la implementación del serializador:
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);
}
}
}
losCustomDoubleSerializer
"aparece" para trabajar. Sin embargo, ¿alguien puede sugerir alguna otra forma más simple (o más estándar) de hacer esto?