JAX-RS 提供了一种在@Produces
. Accept
) 向调用者返回信息时。
我的(工作)客户,就像客户经常做的那样,要求我通过 URL 中的扩展名指定内容类型,例如api/widgets.json
. 这将迫使我有各种getWidgetsXXX()
方法,一种是 with @Produces("application/json")
,另一种是 with @Produces("application/xml")
,等等。
但是我使用的是 Apache CXF,我很高兴地发现我可以配置 CXFjaxrs.extensions
以使用init 参数将各种扩展映射到内容类型!
<!-- 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 扩展内容类型映射?
PS我没有使用Spring。