JAX-RS ofrece una forma maravillosa de especificar tipos de contenido en @Produces
, y el marco determinará automáticamente el mejor tipo de contenido del encabezado HTTP Accept
del cliente y, maravilla de maravillas, incluso convierta su objeto a ese tipo (por ejemplo, XML utilizando JAXB o JSON utilizando Jackson) al devolver información a la persona que llama.Asignación de tipos de contenido de extensión en Apache CXF JAX-RS
Mi cliente (de trabajo), como suelen hacer los clientes, dificultó un trabajo simple al solicitar que especifique el tipo de contenido por la extensión en la URL, p. api/widgets.json
. Esto me obliga a tener varios métodos getWidgetsXXX()
, uno con @Produces("application/json")
, otro con @Produces("application/xml")
, etc.
Pero estoy usando Apache CXF y yo estaba encantado de encontrar lo que pude configure CXF para mapear varias extensiones para los tipos de contenido utilizando el jaxrs.extensions
parámetro init!
<!-- registers extension mappings -->
<init-param>
<param-name>jaxrs.extensions</param-name>
<param-value>
xml=application/xml
json=application/json
</param-value>
</init-param>
Pero no puedo encontrar absolutamente ninguna documentación sobre cómo funciona esto en el mundo real. Ingenuamente pensaba que sólo podía anotar un método con un camino con una extensión y sería imitar la cabecera Accepts
:
@Path("/widgets.{extension}")
@GET
@Produces({ "application/json", "application/xml" })
public List<Widget> getWidgets();
Así que llaman usando api/widgets.json
y devuelve XML! Lo cual es particularmente extraño, porque JAX-RS especifica que el tipo de contenido predeterminado es el primero en la lista.
¿Dónde puedo encontrar información sobre cómo usar la asignación de tipos de contenido de extensión CXF?
P.S. No estoy usando Spring.
Gracias por la sugerencia. Su respuesta puede ser útil --- pero me temo que no responde la pregunta. :( –