2013-06-27 27 views
1

我有了類似的方法Web服務:如何爲JAXB中返回的集合設置WrapperElement名稱?

@WebMethod(operationName = "getCampusList") 
@GET 
@Produces({"application/json", "application/xml"}) 
public List<Campus> getCampusList() { 

    List<Campus> campuses = campusService_.getCampusList(); 

    if(campuses.isEmpty()) { 
    throw new WebApplicationException(Response.Status.NOT_FOUND); 
    } 

    return campuses; 
} 

校區JAXB註釋的偉大工程,但封裝根元素是集合。有沒有辦法將其改爲校園?有沒有任何理由,這將是一個壞主意?以下是當前返回值的一小部分。

<collection> 
    <campus> 
    <address> 
     <street1>3000 Ivyside Park</street1> 
     <city>Altoona</city> 
     <state>PA</state> 
     <postalCode>16601-3760</postalCode> 
    </address> 
     <code>AA</code> 
     <id>2</id> 
     <latitude>40.541118</latitude> 
     <longitude>-78.411003</longitude> 
     <mapUrl>http://maps.google.com/maps?z=16&q=40.541118,-78.411003</mapUrl> 
     <name>Altoona</name> 
    </campus> 
    <campus> 

等等

回答

1

,因爲它們提供的根元素返回集合時的那些這種行爲將JAX-RS的實現而變化。您可以返回包含List<Campus>類型的屬性的包裝對象,該屬性的註釋爲@XmlRootElement(name="campuses")

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Campuses { 

    @XmlElement(name="campus") 
    private List<Campus> campuses; 

} 

然後,您將爲XML和JSON創建單獨的get方法,以獲得適當的返回類型。

XML

@GET 
@Produces("application/xml") 
public Campuses getCampusListXML() { 

    List<Campus> campuses = campusService_.getCampusList(); 

    if(campuses.isEmpty()) { 
    throw new WebApplicationException(Response.Status.NOT_FOUND); 
    } 

    Campuses response = new Campuses(); 
    response.setCampuses(campuses); 
    return response; 
} 

JSON

@GET 
@Produces("application/json") 
public List<Campus> getCampusListJSON() { 

    List<Campus> campuses = campusService_.getCampusList(); 

    if(campuses.isEmpty()) { 
    throw new WebApplicationException(Response.Status.NOT_FOUND); 
    } 

    return campuses; 
} 
+1

沿着我開始的路徑的。感謝您的反饋。 –

相關問題