当我试图返回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);
}
请帮帮我。提前致谢
答案 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>