如何将JSON反序列化为具有必需字段但可以包含多个未知字段的Java类?

Lor*_*ius 4 java json jackson dropwizard

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

我在考虑添加一个MaP字段,其中包含所有其他字段,但是输入未映射到该字段。

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

有没有办法和杰克逊有关?

例:

JSON有效负载1:

{
  "first_name": "John",
  "last_name": "Doe",
  "date_of_birth": "01/01/1990",
  "postcode": "1234"
}
Run Code Online (Sandbox Code Playgroud)

JSON有效负载2:

{
  "first_name": "Alice",
  "last_name": "Havee",
  "phone_no": 012345678,
  "passport_no": "AB 123456"
}
Run Code Online (Sandbox Code Playgroud)

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

Java DTO:

public class PersonDTO {

    // mandatory field
    private String firstName;

    // mandatory field
    private String lastName;

    // Unknown optional fields?

    // No args constructor
    // Getters
    // Setters
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*ber 7

您可以使用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
}
Run Code Online (Sandbox Code Playgroud)

也可以看看: