1

次のjson形式でシリアル化できるJAXBアノテーションクラスを探しています。JSON 形式 :{"name":"xyz","attr1":"attr1value","attr2":"attr2value",.....}} 上記の JSON 形式では、name は必須の属性です。その他の属性は必須ではありませんが、ユーザーは属性と同じ数を渡すことができる必要があります。

JSON形式でシリアル化できる以下のJaxBアノテーションクラス {"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() {   
}

}

4

1 に答える 1

3

使用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());
于 2012-09-13T08:24:16.183 に答える