【问题标题】: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));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多