【问题标题】:No message body writer has been found for response class ArrayList未找到响应类 ArrayList 的消息正文编写器
【发布时间】:2012-02-16 12:37:48
【问题描述】:

当我尝试返回 List 时,它抛出 No message body writer has found for response class 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);
}

请帮助我。提前致谢

【问题讨论】:

    标签: java web-services cxfrs


    【解决方案1】:

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

    像这样:

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

    【讨论】:

    • 并确保Container 有一个默认的、无参数的构造函数:)
    【解决方案2】:

    请参阅this,它的 JAXB 给您带来了问题,它不知道如何解组/编组列表。

    【讨论】:

      【解决方案3】:

      我已经使用 JacksonJaxbJsonProvider 解决了这个问题。无需修改 Java 代码。 Spring context.xml 和 Maven pom.xml 中的一些变化,请参阅 https://stackoverflow.com/a/30777172/1245231

      【讨论】:

        【解决方案4】:

        为了避免包装,可以使用 Jackson。 关于如何做,你可以关注我的answer 来询问类似的问题。

        【讨论】:

        • 如果您打算将响应返回为 JSON,则需要该配置。实际上,如果您查看此问题的答案 (stackoverflow.com/questions/24653329/…),您会注意到像这样的简单配置将起作用。但他想要一个 XML 作为响应。
        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          尝试使用 GenericEntity。

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

          【讨论】:

            【解决方案7】:

            添加这个 Maven 依赖项:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-17
              • 1970-01-01
              • 1970-01-01
              • 2023-03-09
              • 2015-09-16
              • 1970-01-01
              相关资源
              最近更新 更多