当前位置: 首页 > 知识库问答 >
问题:

如何确保Jackson中的字段包含

昝宜
2023-03-14

我有一个POJO,我想从JSON创建这个类的一个实例。我使用jackson将JSON转换为Object。我想确保JSON将控制我的POJO的所有属性。JSON可能包含其他额外字段,但必须包含POJO的所有属性。

例子:

class MyClass {
    private String name;
    private int age;

    public String getName(){return this.name;}
    public void setName(String name){this.name = name;}
    public int getAge(){return this.age;}
    public void setAge(int age){this.age = age;}
}

JSON#1

{
    "name":"Nayan",
    "age": 27,
    "country":"Bangladesh"
}

JSON#2

{
    "name":"Nayan",
    "country":"Bangladesh"
}

在这里,我希望JSON#1成功转换为MyClass,但JSON#2应该失败。我该怎么做?这有注释吗?

共有1个答案

田硕
2023-03-14

好吧,有一个注释,您可以将其应用于您的属性,说明它们是必需的。

@JsonProperty(required = true)
public String getName(){ return this.name; }

糟糕的是,截至目前(2.5.0),不支持反序列化验证。

...
Note that as of 2.0, this property is NOT used by BeanDeserializer: support is expected to be added for a later minor version.

从2013年开始,有一个添加验证的未决问题:使用@JsonProperty(必需=true)添加对反序列化基本“是必需”检查的支持

 类似资料:
  • 问题内容: 我只想在我的姓名字段中输入字母作为输入。 我已经尝试过使用matchs方法,但是不幸的是出了点问题,并且抛出了异常。 还有其他检查方法吗? 问题答案: 您可以尝试使用此正则表达式

  • 问题内容: 我想将JSON字符串转换为java对象,但是此对象的类包含抽象字段,Jackson无法实例化抽象字段,并且不会产生该对象。告诉它一些抽象类的默认实现的最简单方法是什么 或根据JSON属性名称决定实现类,例如 对于JSON对象: 我只是想: 我知道在Jackson中可以将类信息嵌入JSON,但是我不想使我使用的JSON格式复杂化。我想通过设置默认实现类或属性名称(’cat’)来决定使用哪

  • 我刚刚完成了我的第一个适当的java程序与图形用户界面,并设置了所有的选项,以使项目创建一个. jar文件,目前显示我的框架和连接到数据库。我遇到的问题是,当我运行程序(我必须从终端运行它,因为单击. jar可能是问题的一部分?),没有我的图像加载。我尝试了以下方法; 进入项目库首选项,并添加驻留在my P3Game文件夹(项目的根目录)中的/img文件夹,但没有效果 尝试直接将图像复制到生成的/

  • 问题内容: 我正在使用杰克逊将我的对象转换为json。该对象具有2个字段: 由于我想将其与jQuery自动完成功能一起使用,因此我希望“ id”在json中显示为“ value”,在“ name”中显示为“ label”。杰克逊的文档不明确这一点,我已经想尽注释,甚至远程好像它做什么,我需要,但我不能让显示为,并显示为在JSON。 有谁知道该怎么做或是否可能? 问题答案: 您是否尝试过使用@Jso

  • 问题内容: 如何确保环回模型中特定字段的唯一性。类似于下面的模型Post,我在其中有一个字段genericId,我希望它在数据库中是唯一的,并在重复键插入时通过错误回送。 我尝试搜索那里的文档和其他示例,但没有成功。我可以想到的一种解决方案是,为create函数创建一个remoteHook,并在插入之前验证此字段,但是正在寻找其他方法。 问题答案: 在您的帐户中设置验证规则

  • 我试图通过“保存数据”按钮从文本字段中获取数据,然后在单击“显示数据”按钮时在文本小部件中显示该数据。我正在使用SharedPreferences依赖项。我已经完成了代码,但有一个问题,每当我单击“Show data”按钮时,它只显示来自第二个文本字段的数据,如下所示:LastName null 结果应该是:FirstName LastName 这是保存数据 这是演出数据