8

我正在尝试使用Spring RestTemplate来检索员工记录列表,例如:

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

问题是 Web 服务(被调用)返回以下 XML 格式:

<雇员> <雇员> .... </雇员> <雇员> .... </雇员> </雇员>

因此,在执行上述方法时,出现以下错误:

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**
4

4 回答 4

16

您可能正在寻找这样的东西:

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

那应该使用自动编组正确编组。

于 2012-02-21T10:50:10.480 回答
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);
于 2012-08-23T11:59:27.613 回答
0

我有一个类似的问题,并在这个例子中解决了它:

http://blog.springsource.com/2009/03/27/rest-in-spring-3-resttemplate/

于 2011-10-07T16:51:39.040 回答
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 jar。它必须在满足上述条件的情况下工作。

于 2012-12-11T19:42:59.727 回答