2011-04-15 59 views
7

我試圖用Spring RestTemplate檢索的員工記錄,如List列表使用:春RestTemplate和XMLStream使用對象

public List<Employee> getEmployeesByFirstName(String firstName) { 
return restTemplate.getForObject(employeeServiceUrl + "/firstname/{firstName}", List.class, firstName); 
} 

問題是,網絡服務(被稱爲),返回以下XML格式:

<employees> <employee> .... </employee> <employee> .... </employee> </employees>

所以在執行上述方法時,我得到以下錯誤:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read [interface java.util.List]; nested exception is org.springframework.oxm.UnmarshallingFailureException: XStream unmarshalling exception; nested exception is com.thoughtworks.xstream.mapper.CannotResolveClassException: **employees : employees** 
+0

遇到了同樣的問題:/ – DomreiRoam 2011-05-16 12:15:09

+0

我的確爲屬性「aliases」設置了一個包含像「employees」這樣的值集合的類別,而我們想要的結果是「org。。.Employees」。希望可以幫助。 – DomreiRoam 2011-05-16 14:18:55

回答

16

你可能在尋找這樣的事情:

public List<Employee> getEmployeeList() { 
    Employee[] list = restTemplate.getForObject("<some URI>", Employee[].class); 
    return Arrays.asList(list); 
} 

應該馬歇爾正確,使用自動編組。

1

確保您傳遞參數到RestTemplate構造函數的Marshaller和Unmarshaller具有defaultImplementation集。

例如:

XStreamMarshaller marshaller = new XStreamMarshaller(); 
marshaller.getXStream().addDefaultImplementation(ArrayList.class,List.class); 

XStreamMarshaller unmarshaller = new XStreamMarshaller(); 
unmarshaller.getXStream().addDefaultImplementation(ArrayList.class,List.class); 

RestTemplate template = new RestTemplate(marshaller, unmarshaller); 
0

我試圖用RestTemplate作爲RESTClient實現和下面的代碼工作爲獲取列表:

public void testFindAllEmployees() { 
    Employee[] list = restTemplate.getForObject(REST_SERVICE_URL, Employee[].class); 
    List<Employee> elist = Arrays.asList(list); 
    for(Employee e : elist){ 
     Assert.assertNotNull(e); 
    } 
} 

確保你的域對象正確註釋以及XMLStream一罐類路徑。它必須滿足上述條件。