[英]No message body writer has been found for response class ArrayList
While I am trying to return List its throwing No message body writer has been found for response class ArrayList.当我尝试返回 List 时,其抛出没有找到响应类 ArrayList 的消息正文编写器。
I have code as follows:我有如下代码:
@POST
@Path("/{scope}/{application}/tables")
@Produces("application/xml")
public List<String> getTableNames(@PathParam("scope") String scope,
@PathParam("application") String application, Request request) {
// For example, I am returning a list of String
return new ArrayList<String>(4);
}
Please help me.请帮我。 Thanks in advance
提前致谢
To return a list, best wrap it into a container annotated @XmlRootElement
and give that container your list as a field, annotated as @XmlElement
. 要返回一个列表,最好将其包装到一个注释为
@XmlRootElement
的容器中,并将该列表作为一个字段给予该容器,注释为@XmlElement
。
Like so: 像这样:
@XmlRootElement
public class Container {
@XmlElement
public List yourlist;
}
看到这个 ,它的JAXB给你带来了问题,它不知道如何解组/编组List。
I've solved it using JacksonJaxbJsonProvider. 我用JacksonJaxbJsonProvider解决了它。 No Java code needs to be modified.
不需要修改Java代码。 Just few changes in Spring
context.xml
and Maven pom.xml
, see https://stackoverflow.com/a/30777172/1245231 Spring
context.xml
和Maven pom.xml
只有少量更改,请参阅https://stackoverflow.com/a/30777172/1245231
I have added the List to existing object of the project scope of domain layer. 我已将List添加到域层的项目范围的现有对象中。
It was more contextual for project and also worked out-of-the box: no needed to test XmlRootElement, but add the test data+logic for List of existing test case for that object. 它对项目更具上下文性,并且开箱即用:不需要测试XmlRootElement,而是为该对象的现有测试用例列表添加测试数据+逻辑。
Having both org.codehaus.jackson and com.fasterxml.jackson dependencies in a same project will cause this No message body writer issue irrespective of annotations.在同一个项目中同时拥有 org.codehaus.jackson 和 com.fasterxml.jackson 依赖项将导致此 No message body writer 问题,无论注释如何。
In my case, the Bean was marshal'd by com.fasterxml.jackson -> jackson-jaxrs-json-provider and unmarshall'd by org.codehaus.jackson -> jackson-jaxrs在我的例子中,Bean 由 com.fasterxml.jackson -> jackson-jaxrs-json-provider 编组,由 org.codehaus.jackson -> jackson-jaxrs 解组
So removing / updating all the references from org.codehaus.jackson to com.fasterxml.jackson fixed this issue.因此,删除/更新从 org.codehaus.jackson 到 com.fasterxml.jackson 的所有引用解决了这个问题。
I have updated it in cxf-servlet.xml, pom.xml and in all java class imports.我已经在 cxf-servlet.xml、pom.xml 和所有 java 类导入中更新了它。
pom.xml pom.xml
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.13.4</version>
</dependency>
Provider in cxf-servlet.xml cxf-servlet.xml 中的提供者
<jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
</jaxrs:providers>
尝试使用GenericEntity。
Response.ok(new GenericEntity<List<String>>(yourCollectionOfStrings) {}).build();
Add this Maven dependency: 添加此Maven依赖项:
<init-param>
<param-name>jaxrs.providers</param-name>
<param-value>org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider</param-value>
</init-param>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.