【发布时间】:2016-01-27 13:55:07
【问题描述】:
我发现了一些我无法理解的奇怪行为。
我已经测试了 4 个类似的例子:
1
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response produce() {
List<Book> books = Arrays
.asList(new Book[] {
new Book("aaa", "AAA", "12345"),
new Book("bbb", "BBB", "09876")
});
return Response.ok(books).build();
}
2
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Book> produce() {
List<Book> books = Arrays
.asList(new Book[] {
new Book("aaa", "AAA", "12345"),
new Book("bbb", "BBB", "09876")
});
return books;
}
3
@GET
@Produces(MediaType.APPLICATION_XML)
public List<Book> produce() {
List<Book> books = Arrays
.asList(new Book[] {
new Book("aaa", "AAA", "12345"),
new Book("bbb", "BBB", "09876")
});
return books;
}
4
@GET
@Produces(MediaType.APPLICATION_XML)
public Response produce() {
List<Book> books = Arrays
.asList(new Book[] {
new Book("aaa", "AAA", "12345"),
new Book("bbb", "BBB", "09876")
});
return Response.ok(books).build();
}
#1、#2、#3 一切正常,但第 4 个示例抛出:
找不到响应对象类型的 MessageBodyWriter: 媒体类型的java.util.Arrays$ArrayList:application/xml。
我在 Wildfly 9 上运行它,我想知道它是否与 RestEasy 或 JaxRS 一般有关?我知道我可以通过在 GenericEntity 中包装集合来修复它,但我不理解这种不一致的行为。
【问题讨论】:
-
这可能取决于构建最终字符串文档(JSON 或 XML)所需的内容。对于 XML,了解 Generic 属性的 Class 可能很重要,因为它用于构建标记。这可能是 JSON 继续而不是 XML 的原因。通过阅读this article,问题显然是在使用响应答案的处理过程中类型丢失了。
标签: java jax-rs resteasy wildfly-9