13

当我试图返回列表时,它的抛出没有为响应类 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);
}

请帮我。提前致谢

4

7 回答 7

20

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

像这样:

@XmlRootElement
public class Container {
    @XmlElement
    public List yourlist;
}
于 2012-02-16T12:57:04.900 回答
4

看到这个,它的 JAXB 给你带来了问题,它不知道如何解组/编组列表。

于 2012-02-16T12:51:18.867 回答
1

我已经使用 JacksonJaxbJsonProvider 解决了它。无需修改 Java 代码。Springcontext.xml和 Maven的一些变化pom.xml,请参见https://stackoverflow.com/a/30777172/1245231

于 2015-06-11T09:51:02.050 回答
0

为了避免包装,可以使用杰克逊。关于如何做到这一点,您可以按照我对类似问题的回答

于 2014-04-24T08:24:57.870 回答
0

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

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

于 2016-03-23T12:30:35.190 回答
-1

尝试使用 GenericEntity。

Response.ok(new GenericEntity<List<String>>(yourCollectionOfStrings) {}).build();
于 2013-11-13T20:36:22.803 回答
-1

添加此 Maven 依赖项:

<init-param>
    <param-name>jaxrs.providers</param-name>
    <param-value>org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider</param-value>
</init-param>
于 2018-10-04T17:14:42.097 回答