如何将 JSON 反序列化为具有已知必填字段但可以有多个未知字段的 Java 类? [英] How can I deserialize a JSON to a Java class which has known mandatory fields, but can have several unknown fields?
本文介绍了如何将 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屋!
查看全文