gpt4 book ai didi

java - 使 Jackson 在 JSON 中的重复属性上失败

转载 作者:搜寻专家 更新时间:2023-10-31 20:00:08 24 4
gpt4 key购买 nike

我使用 Jackson 将 JSON 反序列化为不可变的自定义 Java 对象。这是类(class):

final class DataPoint {
private final int count;
private final int lower;
private final int median;
private final int upper;

@JsonCreator
DataPoint(
@JsonProperty("count") int count,
@JsonProperty("lower") int lower,
@JsonProperty("median") int median,
@JsonProperty("upper") int upper) {
if (count <= 0) {
throw new IllegalArgumentException("...");
}
this.count = count;
this.lower = lower;
this.median = median;
this.upper = upper;
}

// getters...
}

这是我反序列化的 JSON:

{
"count": 3,
"lower": 2,
"median": 3,
"upper": 4
}

它工作正常。现在我打破 JSON,即复制 lower 属性:

{
"count": 4,
"lower": 2,
"lower": 3,
"median": 4,
"upper": 5
}

现在我得到 count == 4lower == 3。相反,我希望 Jackson 反序列化失败,因为 JSON (lower) 中有一个重复的属性。

反序列化代码如下:

String json = "..."; // the second JSON
ObjectMapper mapper = new ObjectMapper().enable(
DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES,
DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES,
DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY)
.disable(DeserializationFeature.ACCEPT_FLOAT_AS_INT);
DataPoint data = mapper.readValue(json, DataPoint.class);

伙计们,在反序列化具有重复属性键的 JSON 时,我可以让 Jackson 失败吗?

非常感谢你们,伙计们!

最佳答案

您可以启用 STRICT_DUPLICATE_DETECTION 使解析器在存在重复属性时抛出 Exception,例如:

String s = "{\"count\": 4,\"lower\": 2,\"lower\": 3,\"median\": 4,\"upper\": 5}";
ObjectMapper mapper = new ObjectMapper();
mapper.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
JsonNode readTree = mapper.readTree(s);
System.out.println(readTree.toString());

这将抛出以下异常:

Exception in thread "main" com.fasterxml.jackson.core.JsonParseException: Duplicate field 'lower'

Here's文档。

关于java - 使 Jackson 在 JSON 中的重复属性上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43803829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com