JAX-RS предлагает прекрасный способ указать типы контента в @Produces
, и платформа автоматически определит лучший тип контента из клиентского HTTP Accept
. ] и, чудо из чудес, даже преобразовать ваш объект в этот тип (например, XML с использованием JAXB или JSON с использованием Jackson) при возврате информации вызывающей стороне.
Мой (рабочий) клиент, как это часто делают клиенты, усложнил простую работу, попросив указать тип контента по расширению в URL-адресе, например. API/widgets.json
. Это заставит меня иметь различные методы getWidgetsXXX()
, один с @Produces("application/json")
, другой с @Produces("application/xml")
и т. д.
Но я использую Apache CXF и был рад обнаружить, что могу настроить CXFдля сопоставления различных расширений с типами контента с помощью jaxrs.extensions
. ] начальный параметр!
jaxrs.extensions
xml=application/xml
json=application/json
Но я не могу найти абсолютно никакой документации о том, как это работает в реальном мире. Я наивно думал, что могу просто аннотировать метод с помощью пути с расширением, и он будет имитировать заголовок Accepts
:
@Path("/widgets.{extension}")
@GET
@Produces({ "application/json", "application/xml" })
public List getWidgets();
Поэтому я вызываю его, используя api/widgets.json
, и он возвращает XML! Что особенно странно, поскольку JAX-RS указывает, что тип содержимого по умолчанию является первым в списке.
Где я могу узнать, как использовать сопоставление типов содержимого расширения CXF?
П.С. Я не использую Spring.