我想在REST API中同时支持Resources的XML和JSON表示。我别无选择,只能在不使用Spring的情况下使用Jax-RS的CXF实现。我正在使用JAXB来编组和解组对象。我定义了以下方法,返回相同资源的不同表示。
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.WILDCARD})
@ElementClass(response = MyList.class)
public Response listXML(){
MyList list = getList();
return Response.status(
Response.Status.FOUND).
entity(list).type(MediaType.APPLICATION_XML).build();
}
@GET
@Produces({MediaType.APPLICATION_JSON})
@ElementClass(response = MyList.class)
public Response listJson(){
MyList list = getList();
return Response.status(
Response.Status.FOUND).
entity(list).type(MediaType.APPLICATION_JSON).build();
}
这适用于XML表示。但是,如果我将HTTP请求的Accept标头设置为application / json,我会收到以下消息。
No message body writer has been found for response class MyList.
我在这里缺少什么? MyList类由JAXB从XSD生成并具有所有必需的注释看起来我需要配置CXF以使用JSON提供程序。我无法找到有关在web.xml中为不使用Spring的Web应用程序配置JSON提供程序的良好文档。如果有人有这项工作,请指导我。
答案 0 :(得分:2)
我明白了。我需要将JSONProvider配置为部署描述符中NonSpringServlet的initparams之一。因为我错过了cxf扩展库和jettison库,所以这对我来说不起作用。如果你只依赖于cxf前端jar,那么这些依赖关系不会被maven或gradle自动提取。