use*_*854 1 java rest web-services list
我已经尝试了两个小时尝试从REST Web服务获取返回值,但是Netbeans生成了但是我尝试了一个错误.netbeans生成的代码是
@GET
@Override
@Produces({"application/xml", "application/json"})
public List<Person> findAll() {
return super.findAll();
}
Run Code Online (Sandbox Code Playgroud)
当我创建客户端时,我得到了这个生成的代码
public <T> T findAll_XML(Class<T> responseType) throws UniformInterfaceException {
WebResource resource = webResource;
return resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(responseType);
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多方法来调用它,经过大量的冲浪决定这应该可以做到,但事实并非如此.
public static void main(String[] args) {
PersonRESTClient prc = new PersonRESTClient();
Person person = prc.find_XML(Person.class, "100");
System.out.println(person.getFirstname() + " " + person.getSecondname()); //THIS WORKS!!
GenericType<List<Person>> gType = new GenericType<List<Person>>(){};
List<Person> persons = (List<Person>) prc.findAll_XML(gType.getClass());
for (Person p : persons) {
System.out.println(person.getFirstname() + " " + person.getSecondname());
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
2013年3月7日下午2:23:31 com.sun.jersey.api.client.ClientResponse getEntity SEVERE:Java类restexample2client.RestExample2Client $ 1的消息正文阅读器,以及Java类型类restexample2client.RestExample2Client $ 1和MIME媒体类型应用程序/ xml未找到2013年3月7日下午2:23:31 com.sun.jersey.api.client.ClientResponse getEntity严重:与MIME媒体类型兼容的已注册邮件正文阅读器为:application/xml - >
com.sun .jersey.core.impl.provider.entity.XMLJAXBElementProvider $ App
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider $ StreamSourceReader com.sun. jersey.core.impl.provider.entity.SourceProvider $ SAXSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider $ DOMSourceReader com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider $ App
com.sun .jersey.core.impl.provider.entity.XMLListElementProvider $ App
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider $ App / - > com.sun.jersey.core.impl.provider.entity.FormProvider com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun .jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core. impl.provider.entity.XMLJAXBElementProvider $ General com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider .entity.SourceProvider $ StreamSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider $ SAXSourceReader com.sun.jersey.core.impl.provider.entity.SourceProvider $ DOMSourceReader com.sun.jersey.json.impl. provider.entity.JSONJAXBElementProvider $ General com.sun.jersey.json.impl.provider.entity.JSONArrayProvider $ General
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider $ General
com.sun.jersey.core.impl .provider.entit y.XMLRootElementProvider $ General com.sun.jersey.core.impl.provider.entity.XMLListElementProvider $ General com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider $ General com.sun.jersey.core.impl.provider .entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider $ General com.sun.jersey.json.impl.provider.entity.JSONListElementProvider $ General com.sun.jersey.json.impl.provider. entity.JacksonProviderProxy线程"main"中的异常com.sun.jersey.api.client.ClientHandlerException:Java类restexample2client.RestExample2Client $ 1的消息体读取器和Java类型类restexample2client.RestExample2Client $ 1,并且未找到MIME媒体类型application/xml com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:561)位于com.sun.jersey.api的com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:517). client.WebResource.handle(WebResource.java:684)at com.sun.jersey.api.client.WebResource.access $ 200(WebResource.java:74)at com.sun.jersey.api.client.WebResource $ Builder.get (WebResource.java:507)at com.carnabygaming.rest.service.client.EnterpriseRESTClient.findAll_XML(EnterpriseRESTClient.java:47)at restexample2client.RestExample2Client.main(RestExample2Client.java:32)
任何想法,我出错了?单个对象生成的代码工作得很好.我刚刚注意到,当我进行测试时,该方法不会出现在网页中.还是需要帮助.
是的,您需要提供一个接受超类型令牌(GenericType)的客户端方法的重载变体.现在你的第二个客户端调用实际上是试图将响应数据反序列化为类GenericType<List<Person>>,这不是你想要的.因此,首先,在客户端上定义一个接受超类型令牌的重载方法:
public <T> T findAll_XML(GenericType<T> superType) throws UniformInterfaceException {
WebResource resource = webResource;
return resource.accept(javax.ws.rs.core.MediaType.APPLICATION_XML).get(superType);
}
Run Code Online (Sandbox Code Playgroud)
并在您的客户端中使用它,如下所示:
GenericType<List<Person>> gType = new GenericType<List<Person>>() {};
List<Person> persons = (List<Person>) prc.findAll_XML(gType);
for (Person p : persons) {
System.out.println(person.getFirstname() + " "
+ person.getSecondname());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3335 次 |
| 最近记录: |