Renvoi d’une réponse JSON à partir d’un servlet

Renvoi d'une réponse JSON à partir d'un servlet

1. introduction

Dans ce rapide didacticiel, nous allons créer une petite application Web et découvrir comment renvoyer une réponse JSON à partir d'unServlet.

2. Maven

Pour notre application Web, nous allons inclure les dépendancesjavax.servlet-api et Gson dans nospom.xml:


    javax.servlet
    javax.servlet-api
    ${javax.servlet.version}


    com.google.code.gson
    gson
    ${gson.version}

Les dernières versions des dépendances peuvent être trouvées ici:javax.servlet-api etgson.

Nous devons également configurer un conteneur Servlet sur lequel déployer notre application. This article est un bon point de départ pour savoir comment déployer un WAR sur Tomcat.

3. Créer une entité

Créons une entitéEmployee qui sera ultérieurement renvoyée par lesServlet en tant que JSON:

public class Employee {

    private int id;

    private String name;

    private String department;

    private long salary;

    // constructors
    // standard getters and setters.
}

4. Entité à JSON

Pour envoyer une réponse JSON à partir desServlet, nous devons d'abord lesconvert the Employee object into its JSON representation.

Il existe de nombreuses bibliothèques java disponibles pour convertir un objet en représentation JSON et inversement. Les plus importantes d'entre elles seraient les bibliothèques Gson et Jackson. Pour en savoir plus sur les différences entre GSON et Jackson, jetez un œil àthis article.

Un exemple rapide pour convertir un objet en représentation JSON avec Gson serait:

String employeeJsonString = new Gson().toJson(employee);

5. Réponse et type de contenu

Pour les servlets HTTP, la procédure correcte pour renseigner la réponse:

  1. Récupérer un flux de sortie de la réponse

  2. Remplissez les en-têtes de réponse

  3. Ecrire du contenu dans le flux de sortie

  4. Engager la réponse

Dans une réponse, un en-têteContent-Type indique au client quel est réellement le type de contenu du contenu renvoyé.

Pour produire une réponse JSON, le type de contenu doit êtreapplication/json:

PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();

Les en-têtes de réponse doivent toujours être définis avant que la réponse ne soit validée. Le conteneur Web ignorera toute tentative de définition ou d'ajout d'en-têtes une fois la réponse validée.

L'appel deflush() sur lePrintWriter valide la réponse.

6. Exemple de servlet

Voyons maintenant un exempleServlet qui renvoie une réponse JSON:

@WebServlet(name = "EmployeeServlet", urlPatterns = "/employeeServlet")
public class EmployeeServlet extends HttpServlet {

    private Gson gson = new Gson();

    @Override
    protected void doGet(
      HttpServletRequest request,
      HttpServletResponse response) throws IOException {

        Employee employee = new Employee(1, "Karan", "IT", 5000);
        String employeeJsonString = this.gson.toJson(employee);

        PrintWriter out = response.getWriter();
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        out.print(employeeJsonString);
        out.flush();
    }
}

7. Conclusion

Cet article explique comment renvoyer une réponse JSON à partir d'un servlet. Cela est utile dans les applications Web qui utilisent Servlets pour implémenter les services REST.

Tous les exemples de code présentés ici peuvent être desfound on GitHub.