将java对象映射到JSON的困难

将java对象映射到JSON的困难,java,json,jackson,Java,Json,Jackson,我试图将JSON映射到java对象,反之亦然。这样,类的未知参数通过@JsonAnySetter方法映射到java.util.Map。但是在从java对象返回json时,我得到了错误的输出。我正在使用fasterxml库 这是我的java对象: import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.ja

我试图将JSON映射到java对象,反之亦然。这样,类的未知参数通过
@JsonAnySetter
方法映射到
java.util.Map
。但是在从java对象返回json时,我得到了错误的输出。我正在使用fasterxml库

这是我的java对象:

import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class TestClass {
    private String context_id;
    private Map<String, String> properties = new HashMap<>();

    public String getContext_id() {
        return context_id;
    }
    public void setContext_id(String context_id) {
        this.context_id = context_id;
    }
    @JsonAnySetter
    public void set(String fieldName, String value){
        this.properties.put(fieldName, value);
    }
    @JsonAnyGetter
    public Map<String, String> any() {
        return this.properties;
    }
    public String get(String fieldName){
        return this.properties.get(fieldName);
    }
}
当我试图从java对象获取JSON时,我得到如下结果:

{
            "context_id": "14",
            "properties" : {
                   "io": "odp"
             },
            "io": "odp"
}
但我应该像这样把它拿回来:

{
        "context_id": "14",
        "properties" : {
               "io": "odp"
         }
}

我没有得到它。

删除get方法,一切都会好起来。作为替代方案,您可以在getter上设置@JsonIgnore(请参见
).

谢谢大家的帮助。我已经解决了这个问题。 1.我已经把这部分移走了

@JsonAnyGetter
public Map<String, String> any() {
    return properties;
}
@JsonAnyGetter
公共地图任意(){
归还财产;
}
  • 为属性映射添加普通getter,如-

    公共映射getProperties(){ 归还财产; }


  • 你的意思是你的预期产出,还是你希望产出与你的投入相似?是的,我的意思是。我的预期输出是-
    {“context\u id”:“14”,“properties”:{“io”:“odp”}
    如果删除get方法,我将无法获取存储到map中的未知参数,我希望我的输出是这样-
    {“context\u id”:“14”,“properties”:{“io”:“odp”}
    不是这个-
    {“context_id”:“14”,“properties”:{“io”:“odp”},“io”:“odp”}
    当然。你用上面提到的答案试过了吗?是的。因为我的json是
    {“context_id”:“12”,“yio”:“odjp”}
    不是预期的。
    @JsonAnyGetter
    public Map<String, String> any() {
        return properties;
    }