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

ObjectMapper反序列化必填字段[重复]

干稳
2023-03-14

假设我有这样的json,我想将其反序列化为一个名为SubscriberProfile的对象。

{ "field1": "value1", "field2": "value2", "field3": "value3" }

当我使用以下代码时,它可以正常工作,

objectMapper.readValue(json,SubscriberProfile.class);

但如果json中缺少字段2,我希望objectmapper抛出和异常(可能缺少字段1和字段2)。

所以这样的json应该抛出一个异常

{ "field1": "value1", "field3": "value3" }

我曾尝试使用@JsonProperty(required=true)注释,但仅在序列化它时有效。

你知道我该怎么解决这个问题吗?

提前感谢

共有1个答案

索吕恭
2023-03-14

您需要删除bean类的默认构造函数。这就是允许Jackson创建一个没有必填字段的bean的原因。例如(从这里修改):

public class NonDefaultBean {
    private final String myRequired;
    private String myNotRequired;

    @JsonCreator
    public NonDefaultBean(@JsonProperty("myRequired") String myRequired) {
        this.myRequired = myRequired;
    }

    public void setMyNotRequired(String myNotRequired) {
        this.myNotRequired = myNotRequired;
    }
}
 类似资料:
  • 问题内容: 从文档中: read_only将此设置为True以确保序列化表示形式时使用该字段,而在反序列化期间更新实例时不使用该字段。 默认为False 必需通常,如果反序列化过程中未提供字段,则会引发错误。如果反序列化过程中不需要此字段,则设置为false。 默认为True。 因此,我有一个模型,该模型的字段不可为空,但我希望在pre_save方法中填充该字段,因此我已将该字段设置为序列化器,但

  • 使用Jackson将JSON响应反序列化为DTO。 使用Gson或Jackson反序列化JSON时忽略空字段 他们仍然从那个不规则的JSON对象创建一个对象。 这意味着我需要遍历这个列表,并通过实现一个清理方法删除所有不具有属性“value”的对象。 我的带有Jackson注释的DTO: 给定JSON响应的结果是初始化了3个DTOs,而不是4个。

  • 问题内容: 的功能需要Class。但是,如果我内部传递的类将某些接口作为数据成员,该如何使用它。 尽管我可以理解此异常的原因,因为杰克逊没有获得所传递类的内部接口的具体类,但我的问题是如何解决它?那我该如何反序列化呢?我要反序列化的类是: 这是一个接口,所以这给了我以下错误:- 问题答案: 杰克逊显然不能构造对象,因为它是一个接口。您将需要在json和ObjectMapper中具有其他信息,以告诉

  • 我想知道,是否有某种方法来指示对象映射器(或注入一些东西到它)以不同的方式处理这样的字段?

  • 我使用的是Spring Kafka 1.1.2-Spring Boot 1.5.0 RC版本,并且配置了一个自定义值serialiser/Deserialiser类,扩展/。这些类确实使用Jackson ObjectMapper,它可以通过构造函数提供。 是否可以从Spring上下文中注入ObjectMapper?我已经配置了一个ObjectMapper,我希望在序列化/反序列化程序中重用它。

  • 问题内容: 我有一个逐步填写的模型,这意味着我正在制作一个表单向导。 因此,此模型中的大多数字段都是必需的,但必须避免在提交部分数据时引发非空错误。 我正在使用Angular.js和django-rest-framework,我需要告诉api应该是x和y字段,如果它们为空,则需要返回验证错误。 问题答案: 您需要专门覆盖该字段并添加自己的验证器。您可以在此处详细了解http://www.djang