使用Apache CXF而不使用Spring的JSON表示的REST API

时间:2013-08-11 18:41:06

标签: json rest cxf jax-rs

我想在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提供程序的良好文档。如果有人有这项工作,请指导我。

1 个答案:

答案 0 :(得分:2)

我明白了。我需要将JSONProvider配置为部署描述符中NonSpringServlet的initparams之一。因为我错过了cxf扩展库和jettison库,所以这对我来说不起作用。如果你只依赖于cxf前端jar,那么这些依赖关系不会被maven或gradle自动提取。