Jersey REST服务输出格式

时间:2012-10-03 12:11:59

标签: java web-services jersey

我需要根据以下场景

使用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>

任何人都可以告诉我如何实现这一目标吗?

1 个答案:

答案 0 :(得分: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;
}