0

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

javax.ws.rs.WebApplicationException:javax.xml.bind.UnmarshalException - 带有链接异常:[com.sun.istack.internal.SAXParseException2; 行号:0;列号:5;意外元素(uri:“”,本地:“id”)。预期元素是 <{}snowCannonDataEntity>]

编码:

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

2 回答 2

1

根据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);
于 2012-08-07T09:57:19.167 回答
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));
于 2012-06-29T09:10:01.443 回答