Java 未找到媒体类型为Application/json、glassfish的MessageBodyWriter

Java 未找到媒体类型为Application/json、glassfish的MessageBodyWriter,java,json,web-services,glassfish,Java,Json,Web Services,Glassfish,我正在使用JAX-RS创建简单的restful json,我的第一个方法工作得很好,但是当我添加第二个方法来获取所有vendorNOS“ID”方法时,我在浏览器中查看时出现了这个异常,我也调试restful服务,它工作得很好,它将所有vendorNOS“ID”都隐藏起来 vendorFacadeBean的输出是{1,2,3,4,5,6,11,13} HTTP状态500-内部服务器错误 类型异常报告 消息内部服务器错误 说明服务器遇到内部错误,无法满足此请求。 例外 javax.servlet.S

我正在使用JAX-RS创建简单的restful json,我的第一个方法工作得很好,但是当我添加第二个方法来获取所有vendorNOS“ID”方法时,我在浏览器中查看时出现了这个异常,我也调试restful服务,它工作得很好,它将所有vendorNOS“ID”都隐藏起来

vendorFacadeBean的输出是{1,2,3,4,5,6,11,13}
HTTP状态500-内部服务器错误
类型异常报告
消息内部服务器错误
说明服务器遇到内部错误,无法满足此请求。
例外
javax.servlet.ServletException:org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:MessageBodyWriter未找到媒体类型=应用程序/json,类型=类java.util.Vector,genericType=java.util.List。
根本原因
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException:未找到媒体类型=应用程序/json、类型=类java.util.Vector、genericType=java.util.List的MessageBodyWriter。
请注意,GlassFish Server开源版本4.0日志中提供了异常及其根本原因的完整堆栈跟踪。
GlassFish服务器开源版本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;
    }
}
包资源;
导入case2dtos.VendorEJBDTO;
导入case2ejbs.VendorFacadeBean;
导入java.util.List;
导入javax.ejb.ejb;
导入javax.ws.rs.core.Context;
导入javax.ws.rs.core.UriInfo;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.PUT;
导入javax.ws.rs.Path;
导入javax.ws.rs.GET;
导入javax.ws.rs.products;
导入javax.enterprise.context.RequestScope;
/**
*RESTWeb服务
*
*@作者abdallaelnajjar
*/
@路径(“供应商”)
@请求范围
公共类供应商资源{
@EJB
私人供应商;
@上下文
私有信息上下文;
/**
*创建VendorsResource的新实例
*/
公共供应商资源(){
}
/**
*检索resources.VendorsResource实例的表示形式
*@返回java.lang.String的实例
*/
@得到
@路径(“getAVendor/{vendorno}”)
@生成(“应用程序/json”)
公共VendorEJBDTO getAVendor(@PathParam(“vendorno”)int vendorno)
{
返回vendorFacadeBean.getVendorInfo(vendorno);
}
/**
*检索resources.VendorsResource实例的表示形式
*@返回java.lang.String的实例
*/
@得到
@路径(“getVendornos”)
@生成(“应用程序/json”)
公共列表getVendornos()
{
列表vendornosList=null;
尝试
{
vendornosList=vendorFacadeBean.getvendornos();
}
捕获(例外e)
{
System.out.println(e.getMessage());
}
返回供应商列表;
}
}

您从第二种方法返回的
列表似乎存在问题

您是否看到如下错误

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
请参阅。此外,这似乎是不可能的。

使用genson()jar并将其添加到类路径中。这将把任何对象转换为json格式。出现此错误是因为您没有json提供程序。返回object比返回toString()更好


您还可以使用jersey捆绑包附带的JAXB jar。这将同时支持XML和JSON。您可以在jersey发行版的/ext文件夹中找到jar

我通过添加以下依赖项解决了这个问题

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.17</version>
</dependency>

org.glassfish.jersey.media
泽西媒体公司
2.17

我使用的是jersey-spring3jersey 2spring4

我将方法返回类型更新为String,并将vendorFacadeBean.getvendornos()转换为String();我将更新我的回答,因为他特别询问Glassfish,它是一个完整的JavaEE容器。
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-moxy</artifactId>
    <version>2.17</version>
</dependency>