Définir un corps de réponse dans JAX-RS

Définir un corps de réponse dans JAX-RS

**

1. Vue d'ensemble

Pour simplifier le développement des services Web REST et de leurs clients en Java, une implémentation standard et portable de l'APIJAX-RS a été conçue, appelée Jersey.

Jersey est un framework open source pour le développement de services Web REST qui prennent en charge les APIJAX-RS et sert d'implémentation de référence deJAX-RS.

Dans ce didacticiel, nous allons voir comment nous pouvons configurer un corps de réponseJersey avec différents types de médias.

2. Dépendances Maven

Tout d'abord, nous avons besoin des dépendances suivantes incluses dans le fichierpom.xml:


    org.glassfish.jersey.bundles
    jaxrs-ri
    2.26


    org.glassfish.jersey.core
    jersey-server
    2.26

La dernière version deJAX-RS se trouve àjaxrs-ri, et le serveurJersey se trouve àjersey-server

3. Réponse à Jersey

Naturellement, il existe différentes manières de créer une réponse à l'aide deJersey, et nous verrons comment nous pouvons les construire ci-dessous.

Tous les exemples ici sont des requêtes HTTP GET, et nous utiliserons la commandecurl pour tester les ressources.

3.1. Réponse textuelle OK

Le point final présenté ici est un exemple simple de la façon dont le texte brut peut être renvoyé sous forme de réponse Jersey:

@GET
@Path("/ok")
public Response getOkResponse() {

    String message = "This is a text response";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .build();
}

Nous pouvons faire un HTTP GET en utilisantcurl pour vérifier la réponse:

curl -XGET http://localhost:8080/jersey/response/ok

Ce noeud final renverra une réponse comme suit:

This is a text response

Lorsque le type de média n’est pas spécifié,Jersey will default to text/plain.

3.2. Réponse d'erreur

Errors can also be sent back comme réponse Jersey:

@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();
}

Pour vérifier la réponse, nous pouvons faire une requête HTTP GET en utilisantcurl:

curl -XGET http://localhost:8080/jersey/response/not_ok

Le message d'erreur sera renvoyé dans la réponse:

There was an internal server error

3.3. Réponse en texte brut

Nous pouvons également renvoyersimple plain text responses:

@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();
}

Encore une fois, nous pouvons faire un HTTP GET en utilisantcurl pour vérifier la réponse:

curl -XGET http://localhost:8080/jersey/response/text_plain

La réponse sera la suivante:

This is a plain text response

Le même résultat pourrait également être obtenu via l'annotationProduces au lieu d'utiliser la méthodetype() dans lesResponse:

@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();
}

Nous pouvons faire la vérification des réponses en utilisantcurl:

curl -XGET http://localhost:8080/jersey/response/text_plain_annotation

Voici la réponse:

This is a plain text response via annotation

3.4. Réponse JSON à l'aide de POJO

Un simplePlain Old Java Object (POJO) can also be used build a Jersey response.

Nous avons un POJOPerson très simple ci-dessous, que nous utiliserons pour créer une réponse:

public class Person {
    String name;
    String address;

    // standard constructor
    // standard getters and setters
}

Le POJOPerson peut maintenant être utilisé pourreturn JSON as the Response body:

@GET
@Path("/pojo")
public Response getPojoResponse() {

    Person person = new Person("Abhinayak", "Nepal");

    return Response
      .status(Response.Status.OK)
      .entity(person)
      .build();
}

Le fonctionnement de ce point de terminaison GET peut être vérifié - via la commandecurl suivante:

curl -XGET http://localhost:8080/jersey/response/pojo

La personne POJO sera transformée en JSON et renvoyée en réponse:

{"address":"Nepal","name":"Abhinayak"}

3.5. Réponse JSON utilisant une chaîne simple

Nous pouvons utiliserpreformatted strings to create a response, et cela peut être fait simplement.

Le point de terminaison suivant est un exemple de la façon dont un JSON représenté en tant queString peut être renvoyé en tant que JSON dans la réponse Jersey:

@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();
}

Cela peut être vérifié en effectuant un HTTP GET en utilisantcurl pour vérifier la réponse:

curl -XGET http://localhost:8080/jersey/response/json

L'appel de cette ressource renverra un JSON:

{"hello":"This is a JSON response"}

The same pattern applies for other common media types like XML or HTML. Nous devons simplement informer Jersey qu'il s'agit d'un XML ou HTML utilisantMediaType.TEXT_XML ouMediaType.TEXT_HTML et Jersey se chargera du reste. __

4. Conclusion

Dans cet article rapide, nous avons construit des réponses Jersey (JAX-RS) pour divers types de supports.

Tous les extraits de code mentionnés dans l'article se trouvent dansover on GitHub.

**