【问题标题】:How do I serialize this JSON format by JAXB Annotation Class?如何通过 JAXB 注释类序列化这种 JSON 格式?
【发布时间】:2012-09-05 23:40:40
【问题描述】:

我正在寻找可以序列化为以下 json 格式的 JAXB 注释类。 JSON 格式:{"name":"xyz","attr1":"attr1value","attr2":"attr2value",.....}} 在上述 JSON 格式中,name 是必填属性, 其他人不是,但用户应该能够传递尽可能多的属性。

下面的JaxB注解类可以序列化成JSON格式 {"name":"xyz","openContentMap":{"attr1":"attr1value","attr2":"attr2value", so on}}。 但是我们想要JaxB注解可以序列化这种格式{"name":"xyz","attr1":"attr1value","attr2":"attr2value",.....}}

@XmlRootElement
public class MyJaxbBean  {

private String name;
private Map<String, String> openContentMap = new HashMap<String, String>();

@XmlAnyElement
public Map<String, String> getOpenContentMap() {
    return openContentMap;
}

@XmlAnyElement
public void setOpenContentMap(String key, String value) {
    openContentMap.put(key, value);
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public MyJaxbBean() {   
}

}

【问题讨论】:

    标签: java xml json jaxb


    【解决方案1】:

    使用org.codehaus.jackson.annotate.JsonAnyGetter 和org.codehaus.jackson.annotate.JsonAnySetter

    @XmlRootElement
    public class MyJaxbBean
    {
       private String name;
    
       private Map<String, String> openContentMap = new HashMap<String, String>();
    
       public String getName()
       {
          return name;
       }
    
       public void setName(String name)
       {
          this.name = name;
       }
    
       @JsonAnyGetter
       public Map<String, String> getOpenContentMap()
       {
          return openContentMap;
       }
    
       @JsonAnySetter
       public void add(final String key, final String value)
       {
          openContentMap.put(key, value);
       }
    }  
    

    效果很好

      String json = "{\"name\":\"xyz\",\"attr1\":\"attr1value\",\"attr2\":\"attr2value\"}";
      MyJaxbBean agr = new ObjectMapper().readValue(json, MyJaxbBean.class);
      System.out.println(agr.getName() + " " + agr.getOpenContentMap());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多