json - 使用 Apache CXF 且不使用 Spring 的具有 JSON 表示形式的 REST API

标签 json rest cxf jax-rs

我想在 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/

相关文章:

javascript - AngularJs 从 JSON 获取特定键值并将其存储到 $scope

java - 在 Spring Social Tweeter 中,JSON 如何成为 Tweet,以及 RestTemplate.getObject<T> 如何工作?

java - 带有 Spring : WARNING: javax. ws.rs.NotFoundException 的最新 CXF

java - CXF WebService 的 Spring 配置得到 java.lang.NoClassDefFoundError : javax/xml/ws/EndpointReference

CXF Wsdl2Java 最佳实践

java - 在 Gson 双序列化中关闭科学记数法

c# - 将 JSON.Net 用于 BSON 和 JSON 的最简单方法?

javascript - 如何将 RxJS Observable 中的异步数据发送到 Angular 中的下拉列表?

java - 如何在 Apache CXF 中抛出 403 错误 - Java

php - 为什么我的图表canvas.js无法与我的MySQL数据库一起使用