Java Rest JAX-RS异常,未找到MessageBodyWriter
我用的是泽西2.13 当我试图通过浏览器中的url访问资源时,我收到MessageBoddyWriter未找到异常 例外情况: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
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中找到了这篇文章,但它仍然不是我想要的。谢谢