【问题标题】:Jersey REST Service Output FormatJersey REST 服务输出格式
【发布时间】:2012-10-03 12:11:59
【问题描述】:

我需要根据以下场景使用 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>

谁能告诉我如何做到这一点?

【问题讨论】:

    标签: java web-services jersey


    【解决方案1】:

    您可以尝试使用 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 2014-11-15
      • 2014-03-16
      • 2015-05-09
      • 2015-01-05
      • 1970-01-01
      • 2018-08-02
      相关资源
      最近更新 更多