如何将JSON反序列化为一个Java类,该Java类具有已知的必填字段,但可以有几个未知字段?
我有一个输入JSON,里面有我确定的字段。但是,我需要灵活地添加几个额外的字段。我不知道额外字段的名称,但我必须处理它 我正在考虑添加一个包含所有额外字段的映射字段,但是输入没有映射到这个字段中 我想在Dropwizard端点中反序列化JSON 有办法对付杰克逊吗 例如: JSON有效负载1:如何将JSON反序列化为一个Java类,该Java类具有已知的必填字段,但可以有几个未知字段?,java,json,jackson,dropwizard,Java,Json,Jackson,Dropwizard,我有一个输入JSON,里面有我确定的字段。但是,我需要灵活地添加几个额外的字段。我不知道额外字段的名称,但我必须处理它 我正在考虑添加一个包含所有额外字段的映射字段,但是输入没有映射到这个字段中 我想在Dropwizard端点中反序列化JSON 有办法对付杰克逊吗 例如: JSON有效负载1: { "first_name": "John", "last_name": "Doe", "date_of_birth": "01/01/1990", "postcode": "1234"
{
"first_name": "John",
"last_name": "Doe",
"date_of_birth": "01/01/1990",
"postcode": "1234"
}
JSON有效负载2:
{
"first_name": "Alice",
"last_name": "Havee",
"phone_no": 012345678,
"passport_no": "AB 123456"
}
稍后,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
}
您可以使用
jsonanystetter
注释:
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
}
class PersonDTO{
@JsonProperty(“名字”)
私有字符串名;
@JsonProperty(“姓氏”)
私有字符串lastName;
private Map extras=新HashMap();
@JSONANYSETER
公共void setExtras(字符串名称、字符串值){
此.extras.put(名称、值);
}
//无参数构造函数
//吸气剂
//二传手
}
另见:
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;
public class PersonDTO {
// mandatory field
private String firstName;
// mandatory field
private String lastName;
// Unknown optional fields?
// Capture all other fields that Jackson do not match other members
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
// No args constructor
// Getters
// Setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class PersonDTO { //TODO:- }
new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)