我正在使用JAX-RS创建简单的restful json我的第一个方法正常工作但是当我添加第二个来获取所有vendorNOS“ID”方法时,我在浏览器中查看此异常时我也调试了Restful服务和它工作正常所有vendorNOS“ID”
my output from vendorFacadeBean is {1,2,3,4,5,6,11,13}
HTTP Status 500 - Internal Server Error
type Exception report
messageInternal Server Error
descriptionThe server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=Application/json, type=class java.util.Vector, genericType=java.util.List<java.lang.Integer>.
root cause
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=Application/json, type=class java.util.Vector, genericType=java.util.List<java.lang.Integer>.
note The full stack traces of the exception and its root causes are available in the GlassFish Server Open Source Edition 4.0 logs.
GlassFish Server Open Source Edition 4.0
java源代码
package resources;
import case2dtos.VendorEJBDTO;
import case2ejbs.VendorFacadeBean;
import java.util.List;
import javax.ejb.EJB;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.enterprise.context.RequestScoped;
/**
* REST Web Service
*
* @author abdallaelnajjar
*/
@Path("vendors")
@RequestScoped
public class VendorsResource {
@EJB
private VendorFacadeBean vendorFacadeBean;
@Context
private UriInfo context;
/**
* Creates a new instance of VendorsResource
*/
public VendorsResource() {
}
/**
* Retrieves representation of an instance of resources.VendorsResource
* @return an instance of java.lang.String
*/
@GET
@Path("getAVendor/{vendorno}")
@Produces("Application/json")
public VendorEJBDTO getAVendor(@PathParam("vendorno")int vendorno)
{
return vendorFacadeBean.getVendorInfo(vendorno);
}
/**
* Retrieves representation of an instance of resources.VendorsResource
* @return an instance of java.lang.String
*/
@GET
@Path("getVendornos")
@Produces("Application/json")
public List<Integer> getVendornos()
{
List<Integer> vendornosList = null;
try
{
vendornosList = vendorFacadeBean.getVendorsnos();
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
return vendornosList;
}
}
答案 0 :(得分:3)
使用genson(https://code.google.com/p/genson/downloads/list)jar并将其添加到类路径。这会将任何对象转换为json格式。您收到此错误,因为您没有json提供程序。最好返回object而不是toString()。
除了你可以使用随球衣束附带的JAXB jar。这将支持XML和JSON。你可以找到泽西分布的jar里面/ ext文件夹。
答案 1 :(得分:3)
我通过添加以下依赖项来解决它。
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.17</version>
</dependency>
我正在使用 jersey-spring3 , jersey 2 和 spring4 。
答案 2 :(得分:1)
问题似乎是List<Integer>
你从第二种方法返回。
您是否看到如下错误?
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.ArrayList, and Java type class java.util.ArrayList, and MIME media type application/xml was not found
请参阅GenericEntity。此外,这似乎duplicate。