我尝试从资源中输出一些文档列表:
@GET
@Produces({MediaType.APPLICATION_XML})
public Response getDocuments(@QueryParam("provider") String provider) {
List<Document> documents = service.getDocuments(provider);
return Response.ok(
new GenericEntity<List<Document>>(
new ArrayList<Document>(documents)) {})
.build();
}
Document类没有用@XmlElement注释(我真的不喜欢使用这样的低级东西来注释我的好对象......)但是我有一个注册的提供者:
@Service
@Provider
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.WILDCARD})
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML, MediaType.WILDCARD})
public class JaxRsDocumentSerializer extends
AbstractMessageReaderWriterProvider<Document> {
当我使用具有以下代码的客户端调用此资源时:
return getResource().path("/documents")
.queryParam("provider", provider)
.accept(MediaType.APPLICATION_XML).get(new GenericType<List<Document>>() {});
我得到了可怕的例外:
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException:
A message body writer for Java class java.util.ArrayList, and Java type
java.util.List<com.polyspot.model.core.Document>,
and MIME media type application/xml was not found
我不明白这里出了什么问题,因为我遵循了我在别处找到的代码,包括在SO中。
非常感谢。
答案 0 :(得分:2)
也许您的Document
课程需要@XmlRootElement
年度。
或者,如果你的泽西岛版本是&gt; = 1.2,你可以尝试使用JResposne
而不是Response
。这样可以避免使用GenericEntity