Hier ist ein Jersey
Service:
Ich möchte XML
oder JSON
response abhängig von url param "format" generieren.
Meine Antwort Instanz wird von jaxb2
Ich weiß, dass ich xml
oder json
response zurückbekomme, wenn ich in meinem Java-Client / Funktionstest diesen Code verwende:
oder
%Vor%Aber ich muss es abhängig von url param machen.
Sie können den Medientyp der Antworteinheit direkt über Antwort # ok (vorausgesetzt, Sie möchten HTTP 200
status zurückgeben) Methode
oder mit Response.ResponseBuilder # Header Methode
%Vor%Dies ist nicht der richtige Weg, um zu tun, was Sie wollen. Sie sollten keinen Abfrageparameter verwenden, um das Ausgabeformat zu bestimmen. Sie haben deklariert, dass Ihre Ressourcenmethode sowohl XML als auch JSON erzeugt. Der standardkonforme Weg besteht darin, den Client einen korrekten HTTP-Header "Accept" senden zu lassen, der angibt, welche Medientypen er verwenden kann. Wenn sie "Accept: application / json" senden, sollte Ihre JAX-RS-Implementierung die Antwort Ihrer Methode als JSON formatieren. Wenn der Client "Accept: application / xml" sendet, sollte Ihre Antwort automatisch als XML formatiert werden. Wenn der Client angibt, dass er beides akzeptieren kann, steht Ihnen auch Ihre JAX-RS-Implementierung zur Verfügung, und Sie sollten sich nicht darum kümmern. Wenn der Client angibt, dass er auch keines akzeptieren kann, sollte Ihr JAX-RS einen entsprechenden HTTP-Fehlercode zurücksenden, der angibt, dass er keine Möglichkeit hat, eine richtige Antwort zurückzusenden.
Hier ist das vollständige Beispiel, die obige Antwort ist richtig. Ich benutze auch den obigen Ansatz, habe aber Probleme mit List. Ich stelle die Entität so ein:
%Vor%Danach stehe ich vor dieser Ausnahme:
%Vor%Nachdem ich das Jersey-Dokument gelesen hatte, fand ich die Lösung, die wir verwenden müssen, um GenericEntity für unsere Kursliste zu verwenden. Hier das Beispiel
%Vor%Ok. Da wir über Dinge außerhalb des Musters sprechen, lass mich hier etwas versuchen:
Wie wäre es mit einem Filter (suchen Sie nach com.sun.jersey.spi.container.ResourceFilterFactory) auf Ihrem Dienst und ändern Sie den Accept-Header auf der Basis Ihres Abfrageparameters (oder fügen Sie ihn hinzu oder überschreiben ihn)?
Nicht die ehrlichste Herangehensweise, ich gebe es zu, aber ich denke, Sie sollten es versuchen