Gruß. Ich hatte eine funktionierende Lösung, aber nach mehreren Änderungen am Projekt funktioniert es nicht mehr.Jackson Mapper Integer von JSON analysiert als Doppel mit Drong Präzision
Das Problem: Front-sendender ganzzahliger Wert 565656
das ist ein Attribut des Objekts, das von Jackson ObjectMapper
konvertiert wird. Ich muss ein Double mit der Genauigkeit 2 von diesem ganzzahligen Wert bekommen.
Dies ist das Java-Modell:
public class Item {
private int condoId;
private Integer itemId;
private String owner;
@NotNull
@Size(min=1, max=60)
private String itemTitle;
@NotNull
@Size(min=1, max=1000)
private String itemDescr;
@NotNull
@Size(min=1, max=45)
private String itemEmail;
@NotNull
@Size(min=1, max=16)
private Double itemPrice;
}
arbeitet vor:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
*In controller, received a request data as string data*
ObjectMapper mapper = new ObjectMapper();
JsonNode node = null;
node = mapper.readTree(data);
Item item = mapper.convertValue(node.get("item"), Item.class);
NumberFormat formatter = new DecimalFormat(".00");
item.setItemPrice(Double.parseDouble(formatter.format(item.getItemPrice())));
Nun ist diese Lösung mir falsch formatierten Werte (wie 5.67657654E8
) aus 567657654
geben. Wie wird das empfangene Integer-Attribut in das erforderliche Double konvertiert?
PS. in PostgreSQL
DB wird es als numeric(10,2)
gespeichert.
EDIT: wohl die richtige Frage ist - warum die empfangene int 567657654
von json POST-Daten deserialisiert double
5.67657654E8
, die ein "solide" ist 5 + dezimal .67657654E8
Es gibt *** keine solche Sache *** als ein "doppelt mit Präzision 2". Die Genauigkeit von "double" ist bei 53 Binärstellen * fixiert *. – EJP
können Sie so etwas http://stackoverflow.com/questions/11520781/serialize-a-double-to-2-decimal-places-using-jackson in Setter für die Anpassung beim Deserialisieren tun. – TechnoCrat
@EJP Ich denke, er will nur mit ein paar Nullen formatieren, da int sowieso keinen Dezimalteil hat. – m0skit0