gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:15:42 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com