我做了一个REST调用,我想找回包含MyClass对象列表的json。实际上我得到了这个例外:
javax.ws.rs.WebApplicationException:javax.xml.bind.UnmarshalException - 链接异常: [com.sun.istack.internal.SAXParseException2; lineNumber:0; columnNumber:5;意外元素(uri:“”,local:“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
{ ... }
答案 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));