Jersey. Wie zum generieren von json-und xml-Ausgabe je nach url-Parameter
Hier ist ein Jersey
service:
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response service(@QueryParam("format") String format) {
if (format.equals("json")) {...}
return response;
}
Möchte ich generieren XML
oder JSON
Antwort zurück, je nach url param "format".
Meine Antwort Instanz ist, die durch jaxb2
Ich weiß, ich darf Sie xml
oder json
Antwort zurück, wenn auf meinem Java-client /funktionales testen mit diesem code:
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_XML).get(String.class);
oder
String content = service.path("").queryParam("myparam", "myvalue").accept(MediaType.APPLICATION_JSON).get(String.class);
Aber ich muss es tun, je nach url-Parameter.
- Wenn Sie könnten senden Sie eine richtige
ContentType
parameterapplication/json
stattjson
haben, dann könnten SieMediaType.valueOf(format)
um dieMediaType
- Instanz und verwenden Sie es mit der accept-Methode. - Ihr Problem ist, dass Sie nicht wissen, wie die Antwort der content-type, oder...?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Medien, die Art der Antwort-Entität direkt über Antwort#ok (vorausgesetzt, Sie wollen zurück
HTTP 200
status) - Methodeoder mit Antwort.ResponseBuilder#header Methode
Dies ist nicht der richtige Weg, das zu tun, was Sie wollen. Sollten Sie nicht über einen query-parameter zu bestimmen, die Ausgabe-format. Sie haben erklärt, dass Sie Ihre Ressource-Methode produziert, die sowohl XML als auch JSON, die standard-konforme Weg ist, lassen Sie die client-senden Sie eine richtige HTTP "Accept" - header, die erklärt, welche Medien-Typen, die Sie in der Lage sind, zu konsumieren. Wenn Sie senden in "Accept: application/json", Ihr JAX-RS-Implementierung wählen sollten, um formatieren Sie Ihre Methode, die die Antwort als JSON, wenn der client sendet "Accept: application/xml", sollte es automatisch formatieren Sie Ihre Antwort als XML. Wenn der AUFTRAGGEBER angibt, Sie annehmen können entweder, Ihr JAX-RS-Implementierung ist frei zu wählen, und Sie sollten nicht Pflege. Wenn der AUFTRAGGEBER angibt, die Sie nicht akzeptieren können entweder, Ihr JAX-RS sollte zurück zu senden einen entsprechenden HTTP-Fehlercode, der angibt, Sie haben keine Möglichkeit es zurück zu senden, eine angemessene Reaktion.
Hier das komplette Beispiel, die obige Antwort richtig ist. Ich benutze auch den obigen Ansatz aber vor problem während der Arbeit mit der Liste. Ich habe die Person wie diese:
Danach bin ich mit dieser Ausnahme:
Nach der Lektüre jersey-Dokument, fand ich die Lösung, die wir brauchen, um zu verwenden GenericEntity für unsere Liste. Hier das Beispiel
Ok. Da reden wir über Dinge, die außerhalb der Muster hier lassen Sie mich etwas versuchen:
Wie über Sie einen filter verwenden (suchen Sie nach com.Sonne.jersey.spi.container.ResourceFilterFactory) auf Ihre service-und ändern (oder hinzufügen oder überschreiben) den accept-header basierend auf Ihrer Abfrage param?
Nicht der ehrlichste Ansatz, ich gebe es zu, aber ich denke, Sie sollten es versuchen