Een JSON-reactie van een servlet retourneren

1. Inleiding

In deze korte zelfstudie maken we een kleine webtoepassing en onderzoeken we hoe u een JSON-antwoord kunt retourneren van een Servlet.

2. Maven

Voor onze webapplicatie zullen we opnemen javax.servlet-api en Gson-afhankelijkheden in onze pom.xml:

 javax.servlet javax.servlet-api $ {javax.servlet.version} com.google.code.gson gson $ {gson.version} 

De laatste versies van de afhankelijkheden zijn hier te vinden: javax.servlet-api en gson.

We moeten ook een Servlet-container configureren om onze applicatie op te implementeren. Dit artikel is een goede plek om te beginnen met het implementeren van een WAR op Tomcat.

3. Een entiteit creëren

Laten we een Werknemer entiteit die later zal worden geretourneerd vanuit de Servlet als JSON:

openbare klasse Medewerker {privé int id; private String naam; particuliere String-afdeling; privé lang salaris; // constructeurs // standaard getters en setters. }

4. Entiteit voor JSON

Om een ​​JSON-antwoord te verzenden vanuit het Servlet we moeten eerst converteer het Werknemer object in zijn JSON-weergave.

Er zijn veel Java-bibliotheken beschikbaar om een ​​object naar hun JSON-weergave te converteren en vice versa. De meest prominente daarvan zouden de Gson- en Jackson-bibliotheken zijn. Lees dit artikel om meer te weten te komen over de verschillen tussen GSON en Jackson.

Een snel voorbeeld voor het converteren van een object naar JSON-weergave met Gson zou zijn:

String employeeJsonString = nieuwe Gson (). ToJson (medewerker);

5. Reactie en inhoudstype

Voor HTTP-servlets, de juiste procedure voor het invullen van het antwoord:

  1. Haal een uitvoerstroom op uit het antwoord
  2. Vul de antwoordkoppen in
  3. Schrijf inhoud naar de uitvoerstroom
  4. Leg het antwoord vast

In een reactie, a Inhoudstype header vertelt de klant wat het inhoudstype van de geretourneerde inhoud eigenlijk is.

Voor het produceren van een JSON-antwoord moet het inhoudstype zijn applicatie / json:

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

Response headers moeten altijd worden ingesteld voordat de response wordt vastgelegd. De webcontainer negeert elke poging om headers in te stellen of toe te voegen nadat het antwoord is vastgelegd.

Roeping doorspoelen () op de PrintWriter pleegt de reactie.

6. Voorbeeld Servlet

Laten we nu een voorbeeld bekijken Servlet dat een JSON-antwoord retourneert:

@WebServlet (name = "EmployeeServlet", urlPatterns = "/ employeeServlet") openbare klasse EmployeeServlet breidt HttpServlet uit {privé Gson gson = nieuwe Gson (); @Override beschermde ongeldige doGet (HttpServletRequest-verzoek, HttpServletResponse-reactie) gooit IOException {Werknemer werknemer = nieuwe werknemer (1, "Karan", "IT", 5000); String employeeJsonString = this.gson.toJson (medewerker); PrintWriter uit = response.getWriter (); response.setContentType ("application / json"); response.setCharacterEncoding ("UTF-8"); out.print (employeeJsonString); out.flush (); }}

7. Conclusie

Dit artikel laat zien hoe je een JSON-antwoord van een Servlet kunt retourneren. Dit is handig in webtoepassingen die Servlets gebruiken om REST-services te implementeren.

Alle codevoorbeelden die hier worden getoond, zijn te vinden op GitHub.