Could not find MessageBodyWriter for response object of type: java.util.ArrayList of media type: application/xml
当我尝试以 xml 格式返回动态创建的类/dtos 列表的响应时,出现上述错误。
@GET
@Path("objects")
public Response getObjects(
@DefaultValue("json") @QueryParam("format") String format)
{
GenericEntity entity;
//I use cglib here to dynamically at runtime create a class called objectDto.
//The class is just a POJO.
List<Object> objectsDto = generateObjects(fields);
entity = new GenericEntity<List<Object>>(objectsDto){};
Response.ResponseBuilder rBuild;
if (format.equals("xml"))
{
rBuild = Response.ok(entity, MediaType.APPLICATION_XML);
}
else
{
rBuild = Response.ok(entity, MediaType.APPLICATION_JSON);
}
return rBuild.build();
}
奇怪的是我可以返回该对象的 JSON 表示形式,但不能返回 XML。我还可以返回非动态创建的类的 XML 表示形式。
我的 Maven 项目中对resteasy-jaxb-provider 具有正确的依赖关系:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>3.0.6.Final</version>
</dependency>
最佳答案
使用开箱即用的 cglib 是不可能实现这一点的。自 XmlRootElement
不被继承,由cglib创建的子类将不再带有该注解。 Cglib 本身是在 Java 引入注释之前编写的,最近没有更新添加此功能。您可以改为使用 cglib 增强器注册 ASM 访问者,该增强器应该负责将注释添加到 cglib 生成的类中。
但是,您可能需要考虑使用 javassist 创建您的类它有更现代的API并支持注释的编写。
关于java - 使用动态创建的类时,RESTEasy 找不到 application/xml 的消息正文编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22019651/