没有为响应类ArrayList找到消息正文编写器

时间:2012-02-16 12:37:48

标签: java web-services cxfrs

当我试图返回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);
}

请帮帮我。提前致谢

7 个答案:

答案 0 :(得分:19)

要返回列表,最好将其包装到注释为@XmlRootElement的容器中,并将该列表作为字段提供给该容器,注释为@XmlElement

像这样:

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

答案 1 :(得分:4)

请参阅this,它给你带来问题的JAXB,它不知道如何解组/编组List。

答案 2 :(得分:1)

我使用JacksonJaxbJsonProvider解决了这个问题。不需要修改Java代码。 Spring context.xml和Maven pom.xml中只有少量更改,请参阅https://stackoverflow.com/a/30777172/1245231

答案 3 :(得分:0)

为了避免包装,人们可以使用杰克逊。 关于如何操作,您可以关注我的answer以获得类似的问题。

答案 4 :(得分:0)

我已将List添加到域图层项目范围的现有对象中。

它更适合项目的上下文,并且开箱即用:不需要测试XmlRootElement,而是为该对象的现有测试用例列表添加测试数据+逻辑。

答案 5 :(得分:-1)

尝试使用GenericEntity。

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

答案 6 :(得分:-1)

添加此Maven依赖项:

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