我想在 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 header 设置为 application/json,我会收到以下消息。
No message body writer has been found for response class MyList.
我在这里缺少什么? MyList 类由 JAXB 从 XSD 生成,并具有所有必要的注释 看起来我需要配置 CXF 以使用 JSON 提供程序。我还没有找到关于在 web.xml 中为不使用 Spring 的 Web 应用程序配置 JSON 提供程序的良好文档。如果有人完成了这项工作,请指导我。
最佳答案
我明白了。我需要将 JSONProvider 配置为部署描述符中 NonSpringServlet 的 initparams 之一。这之前对我不起作用,因为我错过了 cxf 扩展库和 jettison 库。如果您仅依赖于 cxf 前端 jar,则这些依赖项不会被 maven 或 gradle 自动拉取。
关于json - 使用 Apache CXF 且不使用 Spring 的具有 JSON 表示形式的 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18175370/