如何解决Java类java.util.List和Java类型java.util.List <Em>的消息正文阅读器
找不到Java类java.util.List和Java类型java.util.List
我浏览了所有相关的错误链接,但无济于事。
Output from client is like this
<employees>
<employee>
<empNo>E02</empNo>
<empName> New Emp1</empName>
<position>Manager</position>
</employee>
<employee>
<empNo>E01</empNo>
<empName>SMITH</empName>
<position>Clerk</position>
</employee>
<employee>
<empNo>E03</empNo>
<empName>SARATH</empName>
<position>AMD</position>
</employee>
</employees>
pom.xml
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.2</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19.2</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19.2</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.2</version>
</dependency>
这里有一个Java类,可从客户端获取xml。
import java.util.List;
import javax.ws.rs.core.MediaType;
import org.restJersyClint.JersyRestClient.modal.Employee;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.GenericType;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.WebResource.Builder;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class GetJsonAsList
{
public static void main(String[] args)
{
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
WebResource webResourse = client.resource("http://localhost:8080/RestFulCRUD/rest/employee");
Builder builder = webResourse.accept(MediaType.APPLICATION_JSON)//
.header("content-type",MediaType.APPLICATION_JSON);
ClientResponse response = builder.get(ClientResponse.class);
//Status 200 is successful
if(response.getStatus()!=200)
{
System.out.println("Failed with HTTP Error Code: " + response.getStatus());
String error = response.getEntity(String.class);
System.out.println("Error: " + error);
return;
}
GenericType<List<Employee>> generic = new GenericType<List<Employee>>(){};
//from this instance it takes to exception
List<Employee> list = response.getEntity(generic);
System.out.println("Output from server... \n");
for(Employee emp : list)
{
System.out.println("---");
System.out.println("Emp No..." + emp.getEmpNo());
System.out.println("Emp Name..." + emp.getEmpName());
System.out.println("Position..." + emp.getPosition());
}
}
}
这时我得到了错误
List<Employee> list = response.getEntity(generic);
Employee.java
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Employee
{
private String empNo;
private String empName;
private String position;
public Employee()
{
}
public Employee(String empNo,String empName,String position)
{
super();
this.empNo = empNo;
this.empName = empName;
this.position = position;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
}
在控制台中,
Aug 27,2020 10:03:29 AM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: A message body reader for Java class java.util.List,and Java type java.util.List<org.restJersyClint.JersyRestClient.modal.Employee>,and MIME media type application/json was not found
Aug 27,2020 10:03:34 AM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
application/json ->
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$App
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$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.entity.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
Exception in thread "main" com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class java.util.List,and MIME media type application/json was not found
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:630)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:604)
at org.restJersyClint.JersyRestClient.GetJsonAsList.main(GetJsonAsList.java:46)
我搜索并浏览了所有相关链接,但无法解决。 请帮我解决这个问题。 预先感谢。
解决方法
这里的问题是响应pojo文件需要解析为JSON,并且需要MessageBodyReader。(默认情况下支持XML)
您必须为客户端明确设置POJO映射配置。
要解决此问题,您应该添加以下代码行(第2行)。
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,Boolean.TRUE); // <----- set the json configuration POJO MAPPING for JSON reponse paring
Client client = Client.create(clientConfig);
还对Employee.java及以下内容进行更改
//@XmlRootElement // <-- comment this
public class Employee
我也建议您阅读JAX-RS管道流程,以使他们对此有更清晰的了解。
关于Maven依赖项。由于仅使用json解析器实现jersey客户端(1.x),因此在pom.xml中仅需要以下依赖项。
<dependencies>
<!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.1</version>
</dependency>
</dependencies>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。