Richten Sie in JAX-RS einen Antworttext ein
**
1. Überblick
Um die Entwicklung von REST-Webdiensten und ihren Clients in Java zu vereinfachen, wurde eine standardmäßige und portable Implementierung derJAX-RS-API namens Jersey entwickelt.
Jersey ist ein Open-Source-Framework für die Entwicklung von REST-Webdiensten, das die APIs vonJAX-RSunterstützt und als Referenzimplementierung fürJAX-RSdient.
In diesem Tutorial sehen wir uns an, wie wir einenJersey-Antworttext mit verschiedenen Medientypen einrichten können.
2. Maven-Abhängigkeiten
Zunächst benötigen wir die folgenden Abhängigkeiten, die in der Dateipom.xmlenthalten sind:
org.glassfish.jersey.bundles
jaxrs-ri
2.26
org.glassfish.jersey.core
jersey-server
2.26
Die neueste Version vonJAX-RS befindet sich unterjaxrs-ri, und der Server vonJerseybefindet sich unterjersey-server
3. Antwort in Jersey
Natürlich gibt es verschiedene Möglichkeiten, eine Antwort mitJersey zu erstellen, und wir werden im Folgenden untersuchen, wie wir sie erstellen können.
Alle Beispiele hier sind HTTP-GET-Anforderungen, und wir verwenden den Befehlcurl, um die Ressourcen zu testen.
3.1. Ok Textantwort
Der hier gezeigte Endpunkt ist ein einfaches Beispiel dafür, wie einfacher Text als Jersey-Antwort zurückgegeben werden kann:
@GET
@Path("/ok")
public Response getOkResponse() {
String message = "This is a text response";
return Response
.status(Response.Status.OK)
.entity(message)
.build();
}
Wir können ein HTTP-GET mitcurl durchführen, um die Antwort zu überprüfen:
curl -XGET http://localhost:8080/jersey/response/ok
Dieser Endpunkt sendet eine Antwort wie folgt zurück:
This is a text response
Wenn der Medientyp nicht angegeben ist,Jersey will default to text/plain.
3.2. Fehlerantwort
Errors can also be sent back als Jersey-Antwort:
@GET
@Path("/not_ok")
public Response getNOkTextResponse() {
String message = "There was an internal server error";
return Response
.status(Response.Status.INTERNAL_SERVER_ERROR)
.entity(message)
.build();
}
Um die Antwort zu überprüfen, können wir eine HTTP-GET-Anforderung mitcurl ausführen:
curl -XGET http://localhost:8080/jersey/response/not_ok
Die Fehlermeldung wird in der Antwort zurückgesendet:
There was an internal server error
3.3. Nur-Text-Antwort
Wir können auchsimple plain text responses zurückgeben:
@GET
@Path("/text_plain")
public Response getTextResponseTypeDefined() {
String message = "This is a plain text response";
return Response
.status(Response.Status.OK)
.entity(message)
.type(MediaType.TEXT_PLAIN)
.build();
}
Wieder können wir ein HTTP-GET mitcurl durchführen, um die Antwort zu überprüfen:
curl -XGET http://localhost:8080/jersey/response/text_plain
Die Antwort lautet wie folgt:
This is a plain text response
Das gleiche Ergebnis könnte auch über dieProduces -Sannotation erzielt werden, anstatt dietype()-Methode inResponse zu verwenden:
@GET
@Path("/text_plain_annotation")
@Produces({ MediaType.TEXT_PLAIN })
public Response getTextResponseTypeAnnotated() {
String message = "This is a plain text response via annotation";
return Response
.status(Response.Status.OK)
.entity(message)
.build();
}
Wir können die Antwortüberprüfung mitcurl durchführen:
curl -XGET http://localhost:8080/jersey/response/text_plain_annotation
Hier ist die Antwort:
This is a plain text response via annotation
3.4. JSON-Antwort mit POJO
Ein einfachesPlain Old Java Object (POJO) can also be used build a Jersey response.
Wir haben ein sehr einfachesPerson POJO (siehe unten), mit dem wir eine Antwort erstellen:
public class Person {
String name;
String address;
// standard constructor
// standard getters and setters
}
Das POJO vonPerson kann jetzt fürreturn JSON as the Response body verwendet werden:
@GET
@Path("/pojo")
public Response getPojoResponse() {
Person person = new Person("Abhinayak", "Nepal");
return Response
.status(Response.Status.OK)
.entity(person)
.build();
}
Die Funktion dieses GET-Endpunkts kann mit dem folgenden Befehlcurl überprüft werden:
curl -XGET http://localhost:8080/jersey/response/pojo
Das Personen-POJO wird in ein JSON umgewandelt und als Antwort zurückgesendet:
{"address":"Nepal","name":"Abhinayak"}
3.5. JSON-Antwort mit einfacher Zeichenfolge
Wir könnenpreformatted strings to create a response verwenden, und das kann einfach gemacht werden.
Der folgende Endpunkt ist ein Beispiel dafür, wie ein alsString dargestellter JSON als JSON in der Jersey-Antwort zurückgesendet werden kann:
@GET
@Path("/json")
public Response getJsonResponse() {
String message = "{\"hello\": \"This is a JSON response\"}";
return Response
.status(Response.Status.OK)
.entity(message)
.type(MediaType.APPLICATION_JSON)
.build();
}
Dies kann überprüft werden, indem ein HTTP-GET mitcurl durchgeführt wird, um die Antwort zu überprüfen:
curl -XGET http://localhost:8080/jersey/response/json
Wenn Sie diese Ressource aufrufen, wird ein JSON zurückgegeben:
{"hello":"This is a JSON response"}
The same pattern applies for other common media types like XML or HTML. Wir müssen Jersey nur benachrichtigen, dass es sich um XML oder HTML handelt, indemMediaType.TEXT_XML oderMediaType.TEXT_HTML verwendet werden, und Jersey übernimmt den Rest. __
4. Fazit
In diesem kurzen Artikel haben wir Jersey-Antworten (JAX-RS) für eine Vielzahl von Medientypen erstellt.
Alle im Artikel erwähnten Codefragmente befinden sich inover on GitHub.
**