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

1. Introduction

Dans ce tutoriel rapide, nous allons créer une petite application Web et explorer comment renvoyer une réponse JSON à partir d'un servlet .

2. Maven

Pour notre application Web, nous inclurons les dépendances javax.servlet-api et Gson dans notre pom.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 et gson.

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

3. Création d'une entité

Créons une entité Employee qui sera ultérieurement renvoyée du Servlet 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é vers JSON

Pour envoyer une réponse JSON à partir du servlet, nous devons d'abord convertir l' objet Employee en sa représentation JSON .

Il existe de nombreuses bibliothèques Java disponibles pour convertir un objet en une représentation JSON et vice versa. 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, consultez cet article.

Un exemple rapide de conversion d'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 remplir 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. Écrire du contenu dans le flux de sortie
  4. Validez la réponse

Dans une réponse, un en - tête Content-Type indique au client le type de contenu du contenu renvoyé.

Pour produire une réponse JSON, le type de contenu doit être application / 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 de flush () sur PrintWriter valide la réponse.

6. Exemple de servlet

Voyons maintenant un exemple de servlet 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 a montré comment renvoyer une réponse JSON à partir d'un servlet. Ceci est utile dans les applications Web qui utilisent des servlets pour implémenter les services REST.

Tous les exemples de code présentés ici peuvent être trouvés sur GitHub.