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.