Jersey. Wie man json und xml ausgibt, abhängig von URL param

8

Hier ist ein Jersey Service:

%Vor%

Ich möchte XML oder JSON response abhängig von url param "format" generieren.

Meine Antwort Instanz wird von jaxb2

gebildet

Ich weiß, dass ich xml oder json response zurückbekomme, wenn ich in meinem Java-Client / Funktionstest diesen Code verwende:

%Vor%

oder

%Vor%

Aber ich muss es abhängig von url param machen.

    
ses 02.08.2013, 21:18
quelle

4 Antworten

4

Sie können den Medientyp der Antworteinheit direkt über Antwort # ok (vorausgesetzt, Sie möchten HTTP 200 status zurückgeben) Methode

%Vor%

oder mit Response.ResponseBuilder # Header Methode

%Vor%     
Michal Gajdos 03.08.2013, 12:13
quelle
10

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.

    
user2456600 13.02.2014 23:23
quelle
1

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%     
Anshu Kumar 31.01.2016 09:43
quelle
0

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

    
Plínio Pantaleão 02.08.2013 22:22
quelle

Tags und Links