JAX-RS oferuje wspaniały sposób określania typów zawartości w @Produces
, a framework automatycznie określi najlepszy typ zawartości z nagłówka HTTP Accept
klienta i cuda cudów, nawet przekonwertuj swój obiekt na ten typ (np. XML używając JAXB lub JSON używając Jackson) podczas zwracania informacji do osoby dzwoniącej.Odwzorowywanie typów zawartości rozszerzeń w Apache CXF JAX-RS
Mój (pracujący) klient, jak często robią to klienci, utrudnił proste zadanie, żądając określenia typu zawartości według rozszerzenia w adresie URL, np. api/widgets.json
. To zmusi mnie mieć różne getWidgetsXXX()
metody, jedna z @Produces("application/json")
, inny z @Produces("application/xml")
itd
Ale używam Apache CXF i byłem zachwycony, że mogłem configure CXF do mapy różnych typów rozszerzeń do treści uzywajac jaxrs.extensions
parametr inicjujący!
<!-- registers extension mappings -->
<init-param>
<param-name>jaxrs.extensions</param-name>
<param-value>
xml=application/xml
json=application/json
</param-value>
</init-param>
Ale nie mogę znaleźć absolutnie żadnej dokumentacji na temat tego, jak to działa w rzeczywistym świecie. Naiwnie myślałem, że po prostu opisywać metody ze ścieżką z rozszerzeniem i byłoby naśladować Accepts
nagłówka:
@Path("/widgets.{extension}")
@GET
@Produces({ "application/json", "application/xml" })
public List<Widget> getWidgets();
Więc ja nazywam go za pomocą api/widgets.json
i zwraca XML! Co jest szczególnie dziwne, ponieważ JAX-RS określa, że domyślny typ zawartości jest pierwszym wymienionym na liście.
Gdzie mogę dowiedzieć się, jak korzystać z mapowania typów zawartości rozszerzeń CXF?
P.S. Nie używam Springa.
Dzięki za cynk. Twoja odpowiedź może okazać się przydatna --- ale obawiam się, że nie odpowiada na pytanie. :( –