Java Rest JAX-RS异常,未找到MessageBodyWriter

Java Rest JAX-RS异常,未找到MessageBodyWriter,java,web-services,rest,exception,jersey,Java,Web Services,Rest,Exception,Jersey,我用的是泽西2.13 当我试图通过浏览器中的url访问资源时,我收到MessageBoddyWriter未找到异常 例外情况: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.List<com.webservices.entity.Book>. 未找到媒体类型为application/json的Mes

我用的是泽西2.13

当我试图通过浏览器中的url访问资源时,我收到MessageBoddyWriter未找到异常

例外情况:

MessageBodyWriter not found for media type=application/json, 
type=class java.util.ArrayList, genericType=java.util.List<com.webservices.entity.Book>.
未找到媒体类型为application/json的MessageBodyWriter, type=class java.util.ArrayList,genericType=java.util.List。 我有另一种方法,它可以生成“APPLICATION_XML”,而且似乎工作得很好

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Book { 
    @XmlElement
    private String name;    
    @XmlElement
    private String author;
    //getters setters
}

@GET
@Path("/json")
@Produces(MediaType.APPLICATION_JSON)
public List<Book> getJsonResponse(JAXBElement<Book> book){
    return new ArrayList<Book>();
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共类图书{
@XmlElement
私有字符串名称;
@XmlElement
私有字符串作者;
//吸气剂二传手
}
@得到
@路径(“/json”)
@产生(MediaType.APPLICATION_JSON)
公共列表getJsonResponse(JAXBElement手册){
返回新的ArrayList();
}
我的想法是jersey会自动找到由Jackson提供的消息编写器类“JacksonJsonProvider”,但它没有

我的库文件夹:

MessageBodyWriter not found for media type=application/json, 
type=class java.util.ArrayList, genericType=java.util.List<com.webservices.entity.Book>.

根据mkyong教程,您需要在web.xml中添加com.sun.jersey.api.json.POJOMappingFeature参数来集成它们

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.mkyong.rest</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
 </servlet>

泽西塞尔维特酒店
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
com.mkyong.rest
com.sun.jersey.api.json.POJOMappingFeature
真的
1.

从Jersey 2.9开始,已禁用转换器类的自动发现。您必须手动向Jersey注册JSON库的转换器类。以下是我所做的(我正在使用Genson):

@ApplicationPath(“/api/library”)
公共类RestService扩展了应用程序{
@凌驾

public Set>returnValue=new HashSet如果要使应用程序代码同时支持xml和json,则需要创建一个包装器对象来支持集合,而不是返回GenericType。PojoMappingFeature将使用本机Jackson ObjectMapper而不是使用jaxb注释来编组对象

如果您希望它是可移植的,最好的解决方案是创建一个简单的包装器对象

@XmlRootElement
public class Books {

   private List<Book> books;

   public Books() {
   }

   public Books(List<Book> books) {
       this.books = books;
   }

   @XmlElement(name="book")
   public List<Book> getBooks() {
      return books;
   }

   public void setBooks(List<Book> books) {
      this.books = books;
   }
}


@GET
@Path("/json")
@Produces(MediaType.APPLICATION_JSON)
public Books getJsonResponse(JAXBElement<Book> book){
    return new Books(new ArrayList<Book>());
}
@XmlRootElement
公共课用书{
私人书目;
公共书籍(){
}
公共图书(目录图书){
这本书=书;
}
@xmlement(name=“book”)
公共列表getBooks(){
还书;
}
公共书籍(列表书籍){
这本书=书;
}
}
@得到
@路径(“/json”)
@产生(MediaType.APPLICATION_JSON)
公共图书getJsonResponse(JAXBElement图书){
归还新书(new ArrayList());
}

如果您决定还支持MediaType.APPLICATION\u XML,则这是必需的。这也将解决json(jackson)问题。

不起作用,尽管这使我在stackoverflow中找到了这篇文章,但它仍然不是我想要的。谢谢