2012-06-28 22 views
0

我做了一個REST調用,我想找回包含MyClass對象列表的json。其實我得到這個異常:如何返回列表<MyObject>與REST調用?

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

將JSON從服務器返回無法解析出於某種原因。您必須向我們展示MyClass源代碼以及來自服務器的json。您可以通過請求字符串,而不是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)); 
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); 
相關問題