Setzen Sie einen Antworttext in JAX-RS

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.

**