Java Jackson:拆分json并填充已知和未知属性

Java 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

我正在编写一个Spring引导服务,我正在使用jackson
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属性并获取它们的值。如果其他属性需要是一个对象,并且响应的键和值是动态的和任意的,那么你应该将其存储为字符串,并在需要时编码解码到对象。如果(其他)是静态的,则创建一个(其他)对象并将其添加到其中。