Java Jackson:拆分json并填充已知和未知属性
我正在编写一个Spring引导服务,我正在使用jacksonJava Jackson:拆分json并填充已知和未知属性,java,json,spring,spring-boot,jackson,Java,Json,Spring,Spring Boot,Jackson,我正在编写一个Spring引导服务,我正在使用jacksonObjectMapper来处理我的JSON 我需要像这样拆分json: { "copy": { "mode": "mode", "version": "version" }, "known": "string value", "unknown": { "field1": "sdf", "field2": "sdfdf" }, "unknown2": "sdfdf" } public
ObjectMapper
来处理我的JSON
我需要像这样拆分json:
{
"copy": {
"mode": "mode",
"version": "version"
},
"known": "string value",
"unknown": {
"field1": "sdf",
"field2": "sdfdf"
},
"unknown2": "sdfdf"
}
public class MyBean {
private CopyMetadata copy;
private String known;
private Object others;
}
我的意思是,我的豆子是这样的:
{
"copy": {
"mode": "mode",
"version": "version"
},
"known": "string value",
"unknown": {
"field1": "sdf",
"field2": "sdfdf"
},
"unknown2": "sdfdf"
}
public class MyBean {
private CopyMetadata copy;
private String known;
private Object others;
}
我想将已知字段填充到MyBean
properties,并将其他未知属性移动到MyBean.others
property中
已知属性作为字段放置在MyBean
中
有什么想法吗?这个问题的一个可能解决方案是使用jackson注释
@JsonAnyGetter和@JsonAnySetter
您的模型Mybean.class应该是这样的,并且应该可以工作
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
public class MyBean {
private CopyMetadata copy;
private String known;
private Map<String, Object> others = new HashMap<>();
public CopyMetadata getCopy() {
return copy;
}
public void setCopy(CopyMetadata copy) {
this.copy = copy;
}
public String getKnown() {
return known;
}
public void setKnown(String known) {
this.known = known;
}
public Map<String, Object> getOthers() {
return others;
}
public void setOthers(Map<String, Object> others) {
this.others = others;
}
@JsonAnyGetter
public Map<String, Object> getUnknownFields() {
return others;
}
@JsonAnySetter
public void setUnknownFields(String name, Object value) {
others.put(name, value);
}
}
import java.util.HashMap;
导入java.util.Map;
导入com.fasterxml.jackson.annotation.JsonAnyGetter;
导入com.fasterxml.jackson.annotation.JsonAnySetter;
公共类MyBean{
私有拷贝元数据拷贝;
私有字符串已知;
private-Map-others=new-HashMap();
公共复制元数据getCopy(){
返回副本;
}
public void setCopy(复制元数据副本){
this.copy=复制;
}
公共字符串getKnown(){
已知回报;
}
public void setKnown(字符串已知){
这是已知的;
}
公共地图getOthers(){
归还他人;
}
公共空集合其他(映射其他){
这个。其他人=其他人;
}
@JsonAnyGetter
公共地图getUnknownFields(){
归还他人;
}
@JSONANYSETER
public void setUnknownFields(字符串名称、对象值){
其他。输入(名称、值);
}
}
填充MyBean中的字段后,从对象中删除副本和已知密钥。然后你可以创建一个hashmap(其他),遍历rest属性并获取它们的值。如果其他属性需要是一个对象,并且响应的键和值是动态的和任意的,那么你应该将其存储为字符串,并在需要时编码解码到对象。如果(其他)是静态的,则创建一个(其他)对象并将其添加到其中。