在 Apache CXF JAX-RS 中映射扩展内容类型

标签 mapping cxf content-type jax-rs

JAX-RS 提供了一种在 @Produces 中指定内容类型的绝妙方法。 ,并且框架会自动从客户端的 HTTP Accept 中确定最佳内容类型 header 和奇迹的奇迹,甚至在向调用者返回信息时将您的对象转换为该类型(例如,使用 JAXB 的 XML 或使用 Jackson 的 JSON)。

我的(工作)客户端,就像客户经常做的那样,通过请求我通过 URL 中的扩展名指定内容类型,使简单的工作变得更加困难,例如api/widgets.json .这将迫使我拥有各种 getWidgetsXXX()方法,一种是 @Produces("application/json") ,另一个与 @Produces("application/xml") , 等等。

但是我正在使用 Apache CXF,我很高兴地发现我可以 configure CXF使用 jaxrs.extensions 将各种扩展映射到内容类型初始化参数!

<!-- registers extension mappings -->
<init-param>
  <param-name>jaxrs.extensions</param-name>
  <param-value>
    xml=application/xml
    json=application/json
  </param-value>
</init-param>

但是我绝对找不到关于它在现实世界中如何工作的文档。我天真地以为我可以只用带有扩展名的路径注释一个方法,它会模仿 Accepts标题:

@Path("/widgets.{extension}")
@GET
@Produces({ "application/json", "application/xml" })
public List<Widget> getWidgets();

所以我用 api/widgets.json 来称呼它,它返回 XML!这特别奇怪,因为 JAX-RS 指定默认内容类型是列出的第一个。

在哪里可以找到如何使用 CXF 扩展内容类型映射?

附言我没有使用 Spring。

最佳答案

在您的 <jaxrs:server> 中添加以下内容作品:

<jaxrs:extensionMappings>
    <entry key="json" value="application/json" />
    <entry key="xml" value="application/xml" />
</jaxrs:extensionMappings>

来源:http://cxf.apache.org/docs/jax-rs.html#JAX-RS-Debugging

关于在 Apache CXF JAX-RS 中映射扩展内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000699/

相关文章:

java - 将特定的 JSON 映射到 Java 对象

java - Jax-ws、spring 和 SpringBeanAutowiringSupport

file - 表单数据 : wrong Content-Type for . p7m 文件

php - 如何使用 HTTPURLConnection 将表单数据和多个文件从我的 android 应用程序上传到我使用 PHP 的服务器?

nhibernate - Fluent NHibernate : rarely used properties as Component, 还是在单独的表中?

java - 将外键映射到同一个表中

java - Camel-CXF 中如何处理 SOAP header ?

javascript - 显示来自具有图像内容类型的 http 响应的图像

entity-framework - Entity Framework - 映射小数(13,0)问题

java - 列出 spring boot cxf 中的所有其余服务 url