Java RESTEasy易拉罐';使用动态创建的类时,找不到application/xml的消息正文编写器
找不到媒体类型为application/xml的java.util.ArrayList类型的响应对象的MessageBodyWriter 我在尝试以xml形式返回动态创建的类/DTO列表的响应时遇到上述错误Java RESTEasy易拉罐';使用动态创建的类时,找不到application/xml的消息正文编写器,java,xml,maven,resteasy,cglib,Java,Xml,Maven,Resteasy,Cglib,找不到媒体类型为application/xml的java.util.ArrayList类型的响应对象的MessageBodyWriter 我在尝试以xml形式返回动态创建的类/DTO列表的响应时遇到上述错误 @GET @Path("objects") public Response getObjects( @DefaultValue("json") @QueryParam("format") String format) { GenericEntity enti
@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();
}
@GET
@路径(“对象”)
公共响应对象(
@DefaultValue(“json”)@QueryParam(“格式”)字符串格式)
{
一般实体;
//我在这里使用cglib在运行时动态创建一个名为objectDto的类。
//这门课只是一个POJO。
List objectsDto=生成对象(字段);
实体=新的泛型实体(objectsDto){};
Response.ResponseBuilder rBuild;
if(format.equals(“xml”))
{
rBuild=Response.ok(实体,MediaType.APPLICATION\uxml);
}
其他的
{
rBuild=Response.ok(实体,MediaType.APPLICATION\ujson);
}
返回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>
org.jboss.resteasy
resteasy jaxb提供程序
3.0.6.1最终版本
这不可能使用现成的cglib。由于没有继承,cglib创建的子类将不再携带此注释。Cglib本身是在将注释引入Java之前编写的,最近没有任何更新添加此功能。您可以改为向cglib增强器注册ASM访问者,该增强器应负责将注释添加到cglib生成的类中
但是,您可能需要考虑创建具有更现代API的类,并支持注释的编写。
当您用CGLIB生成类时,您还为它们生成JAXB注释吗?我想您已经在那里遇到了问题……我需要用@XmlRootElement注释我的类。。。现在来了解如何向类添加注释:):)谢谢兄弟的帮助!是的,因为@Greg Whitakers的评论,我也从其他线程中发现这是不可能的。我现在将研究javassist,谢谢。