我在rest-assured测试中使用Jackson对JSON进行了格式化,在我的JSON中,我有一个关键字“value”,它可以是String数组或类似Boolean的对象。
{
"value": ["value1", "value2"]
}
字符串
或
{
"value": 2272204.2426
}
型
所以我为这个字段写了自定义的编译器:
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);
}
}
}
型
最后,我注意到像2272204.2426这样的数值被转换为2272204.2。我试着用Gson将其去序列化,效果很好。你知道为什么使用Jackson会缺少小数部分吗?我试着调试代码,我注意到在这一步JsonNode node = oc.readTree(jp);值是2272204.2
2条答案
按热度按时间kqlmhetl1#
为什么不使用来自Jackson的
ObjectMapper
呢?你可以添加DeserializationFeature
到它,不像ObjectCodec
。Map器实际上是扩展编解码器,但有更多的功能,你需要在这种情况下。字符串
在
node.isDouble()
案例中使用上述逻辑kognpnkq2#
在添加**@AllArgsConstructor**后,我成功地将双精度浮点数化
字符串