2

次のシナリオに従って、Jersey を使用して安らかなサービスの出力 (xml) をフォーマットする必要があります

次のようなキーと値のペアを持つクラスがあります。

@XmlRootElement(name="columnValues")
public class KeyValueDTO {
    private String key;
    private String val;

    @XmlElement(name="column")
    public String getKey() {
        return key;
    }

    @XmlElement(name="value")
    public String getVal() {
        return val;
    }
}

残りのサービスによって返される次のようなリストがあるとします。

List<KeyValueDTO> mylist = new ArrayList<KeyValueDTO>();
KeyValueDTO dto1 = new KeyValueDTO();
dto1.key = "Name";
dto1.val = "alex";

KeyValueDTO dto2 = new KeyValueDTO();
dto2.key = "Age";
dto2.val = 23

mylist.add(dto1);
mylist.add(dt02);

そして、次のように出力を生成したい

<Name>alex</Name>
<Age>20</Age>

しかし、現在、次の出力を提供しています

<column>Name</column>
<value>alex</column>
<column>Age</column>
<value>20</column>

誰でもこれを達成する方法を教えてもらえますか?

4

1 に答える 1

0

XmlAdapterを使用してみることができます。

public class KeyValueAdapter extends XmlAdapter<String, List<KeyValueDTO>> {

  @Override
  public List<KeyValueDTO> unmarshal(String v) throws Exception {
    // Needs implementation
    return null;
  }

  @Override
  public String marshal(List<KeyValueDTO> vs) throws Exception {
    StringBuffer buffer = new StringBuffer();
    for (KeyValueDTO v: vs) {
      buffer.append(String.format("<%s>%s</%1$s>", v.key, v.val));
    }
    return buffer.toString();
  }

}

次に、そのアダプターをBeanに追加します。

@XmlRootElement
public static class Wrapper {
  @XmlJavaTypeAdapter(KeyValueAdapter.class)
  List<KeyValueDTO> dtos;
}
于 2012-10-03T20:26:17.597 に答える