如何将 JSON 反序列化为具有已知必填字段但可以有多个未知字段的 Java 类? [英] How can I deserialize a JSON to a Java class which has known mandatory fields, but can have several unknown fields?

查看:21
本文介绍了如何将 JSON 反序列化为具有已知必填字段但可以有多个未知字段的 Java 类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个输入 JSON,其中包含我确定的字段.但是,我需要灵活地添加几个额外的字段.我不知道额外字段的名称,但我必须处理它.

I have an input JSON which has fields what I sure inside. But, I need a flexibility to add several extra fields. I don't know the name of the extra fields, but I have to handle it.

我想添加一个包含所有额外字段的 MaP 字段,但输入未映射到此字段中.

I was thinking adding a MaP field which contains all of extra fields, but the inputs are not mapped into this field.

我想在 Dropwizard 端点中反序列化 JSON.

I want to deserialize the JSON in a Dropwizard endpoint.

杰克逊有办法吗?

示例:

JSON 负载 1:

{
  "first_name": "John",
  "last_name": "Doe",
  "date_of_birth": "01/01/1990",
  "postcode": "1234"
}

JSON 有效负载 2:

JSON payload 2:

{
  "first_name": "Alice",
  "last_name": "Havee",
  "phone_no": 012345678,
  "passport_no": "AB 123456"
}

稍后 JSON 有效负载 3 甚至可以有不同的字段.

Later on JSON payload 3 can have even different fields.

Java DTO:

public class PersonDTO {

    // mandatory field
    private String firstName;

    // mandatory field
    private String lastName;

    // Unknown optional fields?

    // No args constructor
    // Getters
    // Setters
}

推荐答案

可以使用JsonAnySetter注解:

class PersonDTO {

    @JsonProperty("first_name")
    private String firstName;

    @JsonProperty("last_name")
    private String lastName;

    private Map<String, String> extras = new HashMap<>();

    @JsonAnySetter
    public void setExtras(String name, String value) {
        this.extras.put(name, value);
    }

    // No args constructor
    // Getters
    // Setters
}

另见:

这篇关于如何将 JSON 反序列化为具有已知必填字段但可以有多个未知字段的 Java 类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆