2012-10-03 67 views
2

我需要根據以下場景格式化使用Jersey的寧靜服務的輸出(xml)Jersey REST服務輸出格式

我有一個帶有鍵值對的類,如下所示。

@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> 

任何人都可以讓我知道如何做到這一點?

回答

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; 
} 
相關問題