java 未找到响应类ArrayList的消息正文编写器

w80xi6nr  于 2022-12-25  发布在  Java
关注(0)|答案(5)|浏览(118)

当我试图返回List时,它抛出了响应类ArrayList,但没有找到消息体编写器。
我有代码如下:

@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);
}

请帮帮我,先谢了

qgzx9mmu

qgzx9mmu1#

要返回一个列表,最好将其 Package 到一个标注为@XmlRootElement的容器中,并将列表作为字段提供给该容器,标注为@XmlElement
就像这样:

@XmlRootElement
public class Container {
    @XmlElement
    public List yourlist;
}
xtfmy6hx

xtfmy6hx2#

我已经将List添加到域层项目范围的现有对象中。
它更适合项目的上下文,而且也是开箱即用的:不需要测试XmlRootElement,但为该对象的现有测试用例列表添加测试数据+逻辑。

oxf4rvwz

oxf4rvwz3#

在同一个项目中同时拥有org.codehaus.Jackson和com.fasterxml.jackson依赖项将导致此“无消息主体编写器”问题,无论注解如何。
在我的例子中,Bean由com.fasterxml.Jackson-〉jackson-jaxrs-json-provider进行编组,由org.codehaus进行解编组。jackson -〉jackson-jaxrs
所以删除/更新org.codehaus.Jackson到com.fasterxml.jackson的所有引用修复了这个问题。
我已经在cxf-servlet.xml、pom.xml和所有java类导入中更新了它。
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>

cxf-servlet.xml中的提供程序

<jaxrs:providers>
   <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />
</jaxrs:providers>
33qvvth1

33qvvth14#

尝试使用泛型实体。

Response.ok(new GenericEntity<List<String>>(yourCollectionOfStrings) {}).build();
zrfyljdw

zrfyljdw5#

添加此Maven依赖项:

<init-param>
    <param-name>jaxrs.providers</param-name>
    <param-value>org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider</param-value>
</init-param>

相关问题