【问题标题】:how to return List<MyObject> with REST call?如何使用 REST 调用返回 List<MyObject>?
【发布时间】:2012-06-28 12:34:23
【问题描述】:
我进行了 REST 调用,我想取回包含 MyClass 对象列表的 json。实际上我得到了这个例外:
javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException
- 有关联的例外:
[com.sun.istack.internal.SAXParseException2;行号:0;列号:5;意外元素(uri:“”,本地:“id”)。预期元素是 ]
代码:
public List<'MyClass> getLIst()
{
ClientConfig config = new DefaultClientConfig();
config.getClasses().add(MyObjectMapper.class);
Client client = Client.create(config);
WebResource resource = client.resource(HOST_PATH).path(PATH).type(MediaType.APPLICATION_JSON_TYPE).accept(MediaType.APPLICATION_JSON_TYPE);
return resource.get(new GenericType<List<MyClass>>() {
});
}
@XmlRootElement
public class MyClass
{ ... }
【问题讨论】:
标签:
java
web-services
rest
jersey
jackson
【解决方案1】:
根据the suggestion of Paul Sandoz,您的代码确实是要走的路。
但是,如果这不起作用,请使用 Jackson JSON 提供程序而不是默认的 JAXB 提供程序。这对我有用:
import org.codehaus.jackson.jaxrs;
ClientConfig config = new DefaultClientConfig();
config.getClasses().add(MyObjectMapper.class);
config.getClasses().add(JacksonJsonProvider.class);
Client client = Client.create(config);
【解决方案2】:
由于某种原因无法解析从服务器返回的 json。您必须向我们展示 MyClass 源以及来自服务器的 json。您可以通过请求 String 而不是 List 来打印来自服务器的 JSON:
ClientConfig config = new DefaultClientConfig();
config.getClasses().add(MyObjectMapper.class);
Client client = Client.create(config);
WebResource resource = client.resource(HOST_PATH).path(PATH).accept(MediaType.APPLICATION_JSON_TYPE);
System.out.println(resource.get(String.class));