无法为类型的响应对象找到MessageBodyWriter:java.util.Array媒体类型列表:application / xml
尝试在动态创建的类/ dtos列表的xml中返回响应时,我收到上述错误。
@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>
答案 0 :(得分:2)
使用开箱即用的cglib是不可能的。由于XmlRootElement
未被继承,因此cglib创建的子类将不再携带此批注。 Cglib本身是在将注释引入Java之前编写的,并且最近没有更新添加此功能。您可以使用cglib增强器注册ASM访问者,该增强器应负责将注释添加到cglib生成的类中。
但是,您可能需要考虑使用javassist创建类,它具有更现代的API并支持编写注释。