2

我想在我的 REST API 中同时支持资源的 XML 和 JSON 表示。我别无选择,只能使用 Jax-RS 的 CXF 实现而不使用 Spring。我正在使用 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 类由 XSD 的 JAXB 生成,并具有所有必要的注释看起来我需要配置 CXF 以使用 JSON 提供程序。我还没有找到关于在 web.xml 中为不使用 Spring 的 web 应用程序配置 JSON 提供程序的好的文档。如果有人有这个工作,请指导我。

4

1 回答 1

2

我想通了。我需要将 JSONProvider 配置为部署描述符中 NonSpringServlet 的 initparams 之一。这对我之前不起作用,因为我错过了 cxf 扩展库和 jettison 库。如果您只依赖 cxf 前端 jar,这些依赖项不会被 maven 或 gradle 自动提取。

于 2013-08-12T06:52:22.773 回答