如何使用REST调用返回List <myobject>?</myobject>

时间:2012-06-28 12:34:24

标签: java web-services rest jersey jackson

我做了一个REST调用,我想找回包含MyClass对象列表的json。实际上我得到了这个例外:

  

javax.ws.rs.WebApplicationException:javax.xml.bind.UnmarshalException     - 链接异常:   [com.sun.istack.internal.SAXParseException2; lineNumber:0; columnNumber:5;意外元素(uri:“”,local:“id”)。预期元素是&lt; {} snowCannonDataEntity&gt;]

代码:

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
{ ... }

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

由于某种原因,无法解析从服务器返回的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));