gpt4 book ai didi

java - @JsonUnwrapped 禁用 Jackson 的 fail_on_unknown 属性

转载 作者:行者123 更新时间:2023-12-04 14:36:35 28 4
gpt4 key购买 nike

我正在尝试编写一个简单的类来验证 JSON 输入字符串是否可以转换为目标 JAVA 对象。如果在输入 JSON 字符串中发现任何未知字段,则 validator 应该失败。这一切都按预期工作,除非我用 @JsonUnwrapped 注释 A 类中的 B 对象,然后对象映射器将默默地忽略未知属性而不会失败。

这是我的代码:

A 类:

public class A implements Serializable{


protected String id;
protected String name;


protected @JsonUnwrapped B b;

public A(){

}
public A(String id, String name, B b) {
super();
this.id = id;
this.name = name;
this.b = b;
}

//GETTERS/SETTERS

}

B 级:

  public class B {


protected String innerId;
protected String innerName;

public B(){

}
public B(String innerId, String innerName) {
super();
this.innerId = innerId;
this.innerName= innerName;
}
//GETTERS/SETTERS
}

validator 类:

 public class JsonValidator{
public boolean validate(){

ObjectMapper mapper = new ObjectMapper();

//mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);

try {
mapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
A a = mapper.readValue(
JsonValidatorBean.class.getResourceAsStream("sample.json"),
A.class);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

要验证的 JSON:

{
"id": "aaaa",
"naome": "aaa",
"innerId" : "bbbb",
"innerName" : "bbb"

我正在使用 Jackson 2.1我希望此代码在未知属性“naome”上失败,但它不会被忽略。如果我删除 @JsonUnwrapped 并调整 Json 使其具有嵌入式对象,则上述代码会按预期失败。

有什么想法吗?

最佳答案

是的,这是真的。由于需要从父上下文传递展开的属性的逻辑,因此无法有效地验证哪些属性可能合法映射到子 POJO(正在展开的),哪些不是。

有一个 RFE 试图改进事物,捕获不可映射的属性,但当前版本(直到并包括 2.2)不能同时进行解包和防止不可映射的属性。

关于java - @JsonUnwrapped 禁用 Jackson 的 fail_on_unknown 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16038011/

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