来自json的Jackson Mapper整数解析为具有drong精度的double

时间:2016-11-30 09:49:51

标签: java json spring jackson

问候语。 我有一个有效的解决方案,但在对项目进行多项更改后,它不再起作用了。

问题: 前端发送整数值565656,它是由Jackson ObjectMapper转换的对象的属性。我需要从这个整数值得到精度为2的双精度。

这是java模型:

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

之前正在工作:

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

现在这个解决方案为我提供了来自5.67657654E8的错误格式化值(例如567657654)。 将接收的整数属性转换为所需的double的方法是什么?

PS。在PostgreSQL数据库中,它存储为numeric(10,2)

修改 可能正确的问题是 - 为什么从json POST数据中收到的int 567657654被反序列化为double 5.67657654E8,这是一个“实心”5 +十进制.67657654E8

1 个答案:

答案 0 :(得分:2)

这里没有精确问题。输入的每个数字都出现在输出中。你只是看到,但没有认识到浮点数的科学记数法。原因在于您自己的代码:您将itemPrice列声明为NUMERIC(10,2),但您已将其映射到Java Double。这是不正确的:它导致了这个问题;并且它会让未知的其他人进一步走下轨道。

要使用的正确Java类型不是Doubledouble,而是BigDecimal

从不使用浮点数来赚钱。