Приветствие. У меня было рабочее решение, но после внесения нескольких изменений в проект он больше не работает.Jackson Mapper integer от json анализируется как двойной с точностью drong
Проблема: Целочисленное значение переднего конца 565656
, которое является атрибутом объекта, преобразованного Jackson ObjectMapper
. Мне нужно получить двойной с точностью 2 от этого целочисленного значения.
Это ява модель:
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
. Каков способ преобразования полученного целочисленного атрибута в требуемый двойной?
PS. в PostgreSQL
DB хранится как numeric(10,2)
.
EDIT: вероятно, правильный вопрос - почему полученный int 567657654
из данных POST JSon десериализируется в double
5.67657654E8
, который представляет собой «твердый» 5 + десятичную .67657654E8
Существует нет такой вещи ***, как «двойной с точностью 2». Точность 'double' * фиксирована * на 53 двоичных разрядах. – EJP
вы можете сделать что-то подобное http://stackoverflow.com/questions/11520781/serialize-a-double-to-2-decimal-places-using-jackson в setter для настройки при десериализации. – TechnoCrat
@EJP Я думаю, он просто хочет отформатировать с помощью пары нулей, так как int не имеет десятичной части. – m0skit0