2

我需要根据以下场景使用 Jersey 格式化一个 restful 服务的输出(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 回答