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

将Jackson配置为在缺少字段时抛出异常

呼延景同
2023-03-14
public class Person {
  private String name;
  public String getName(){
    return name;
  }
}
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

我有一个字符串str包含这个{“address”:“something”}。注意,JSON中没有“name”字段。如果我做了这样的事情:

mapper.readValue(str, Person.class);

然后我实际上会返回一个名称设置为null的Person对象。是否有一种方法可以将映射器配置为抛出异常,或者返回空引用而不是Person?我希望Jackson认为缺少字段是一种失败,而不希望对结果对象的字段进行显式的空检查。

共有1个答案

空英逸
2023-03-14

不幸的是,杰克逊现在并不支持这一点。

解决方案可以是在构造函数中添加验证。理想情况下,如果您不想将这些值序列化为NULL,那么这意味着您根本不应该将它们序列化为NULL(以其他方式构造)。例如,

public class Person {
  private String name;
  public Person() {
     checkNotNull(name);
  }
} 

但是,这可能不适合所有情况,特别是如果您使用对象的,而不是通过序列化/反序列化。

 类似资料:
  • 我正在尝试为接受JSON输入的前端库创建一个java SDK。本质上,此SDK将特定类型的对象转换为JSON,然后由前端库使用。 我正在使用杰克逊的多态序列化/反序列化使用它的注释系统。 我有一个基类a和扩展a的两个子类B和C。类a有一个类型字段,我用它来决定要使用哪个类(B或C)。语法如下所示: 现在,当我使用Jackson的ObjectMapper函数读取字符串化的JSON并转换为类A时,我根

  • 我得到一个奇怪的错误: blank=true,null=true)文件“/mypath/lib/python2.7/site-packages/django/forms/fields.py”,第214行,在init super(CharField,self)中。init(*args,**kwargs)类型错误:init()获得意外的关键字参数“null” 在没有收到此错误的情况下,如何使此字段不是

  • 我使用的是NiFi(v1.2)处理器ConvertJSONToAvro。我无法解析一个“记录”类型中仅包含2个元素中的1个元素的记录。数据中也允许完全缺少该元素。我的Avro模式不正确吗? 架构片段: 如果“personname”同时包含“first”和“last”,它就可以工作,但是如果它只包含其中一个元素,它就会失败,错误是:无法转换字段personname:无法解析联合:{“last”:“S

  • 我看书 https://stackoverflow.com/a/4028080/5277820 https://stackoverflow.com/a/35549391/5277820 http://community.jaspersoft.com/questions/543275/fonts-problem-while-using-jasper-reports-402-version http:

  • 我正在使用pdfbox-1.8.12从PDF中读取内容以获取XFA。我已经能够成功地为大多数文件获取XFA,而没有遗漏任何字段值。 问题在于一些文件,如错误。pdf。我有许多字段没有像CIN这样的值,但当我在任何PDF查看器、foxit或Acrobat中打开文件时,它会显示该字段。 然后将字节[]转换为字符串。 这是此文件的xfa,如果您在此搜索“U72300DL1996PLC075672”,它将

  • 问题内容: 我正在运行Jersey REST服务。代表我的资源的POJO是带有JAXB(XML)注释的简单Java类(它们是从模式定义生成的-因此具有注释)。 我希望Jersey / Jackson忽略XML注释。我确实在我的web.xml这个配置(如提到这里): 我现在希望@XMLElement批注不再用于JSON字段命名策略。 但是看这个java领域(成员) 我仍然得到以下JSON表示形式: