2
내 안심 테스트에서 Jackson을 사용하여 JSON을 역 직렬화하는 데 문제가 있습니다. JSON에는 String 배열이나 Boolean과 같은 객체가 될 수있는 키 "value"가 있습니다. 내가 2272204.2426 같은 숫자 값은 내가 노력 2272204.2 직렬화 복원되는 것으로 나타났습니다Jackson deserialize Double
public Object deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
if (node.isArray()) {
List<String> list = new ArrayList<>();
for (JsonNode elementNode : node) {
list.add(oc.treeToValue(elementNode, String.class));
}
return list;
} else {
if(node.isDouble()) {
return oc.treeToValue(node, Double.class);
}
else if(node.isBoolean()){
return oc.treeToValue(node, Boolean.class);
}
else {
return oc.treeToValue(node, String.class);
}
}
}
결국 :
{
"value": 2272204.2426
}
{
"value": ["value1", "value2"]
}
또는
그래서 나는이 분야에 대한 사용자 정의 디시리얼라이저를 썼다 Gson을 사용하여 그것을 desierialize하고 잘 작동합니다. 왜 Jackson을 사용하면 소수 부분이 부족한 지 알 수 있습니까? 코드를 디버깅하려고 시도했지만이 단계에서 JsonNode 노드 = oc.readTree (jp); 값은 2272204.2입니다.
node.isDouble()
경우 위의 논리를 사용, 그게 내가 정의 디시리얼라이저를 사용하는 이유는 내가 =를 사용하여 (이 건설 @JsonDeserialize을 사용하고 있습니다 ValueDeserializer.class) private Object 값; 값은 내 대상 개체의 많은 필드 중 하나입니다. – baadnews답장을 보내 주셔서 감사합니다. 괜찮아. 저는 다른 경우에 JsonPath를 사용하여 특정 노드에서 객체를 검색 할 때 십진수 부분이 누락되었음을 확인했습니다. 안심 프로젝트의 쟁점 목록에 따르면 JsonPath (문자열)는 10 진수 값을 반올림합니다. – baadnews