Zuordnung Dateiendung-content-Typen in Apache CXF JAX-RS

JAX-RS bietet eine wunderbare Möglichkeit zur Angabe von content-Typen in @Produces, und der Rahmen bestimmt automatisch die besten Inhalte geben, die vom client die HTTP - Accept - header und, Oh Wunder, sogar konvertieren Sie Ihre Objekt zu diesem Typ (z.B. XML mit Hilfe von JAXB-oder JSON-über Jackson) bei Rückgabe von Informationen an den Anrufer.

Mein (Arbeits -) client, da die Kunden oft tun, eine einfache Aufgabe schwieriger anfordern ich den Inhaltstyp angeben, die durch die Erweiterung in der URL, z.B. api/widgets.json. Das würde mich zwingen, mich haben verschiedene getWidgetsXXX() Methoden, mit @Produces("application/json"), eine andere mit @Produces("application/xml") usw.

Aber ich bin mit Apache CXF und ich war erfreut zu finden, ich könnte konfigurieren CXF zu Karte verschiedene extensions zu content-Typen über die jaxrs.extensions init-parameter!

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

Aber ich finde absolut keine Dokumentation darüber, wie das funktioniert in der realen Welt. Ich naiv gedacht, ich könnte einfach kommentieren eine Methode mit einem Pfad mit einer Verlängerung und es würde imitieren die Accepts header:

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

So, ich nenne es mit api/widgets.json, und es gibt XML! Das ist besonders merkwürdig, da JAX-RS gibt an, dass der Standard-content-Typ ist der erste aufgeführt.

Wo kann ich erfahren, wie CXF Dateiendung-content-type-mapping?

P. S. ich bin nicht mit Spring.

Schreibe einen Kommentar