Restituzione di una risposta JSON da un servlet

1. Introduzione

In questo breve tutorial, creeremo una piccola applicazione web ed esploreremo come restituire una risposta JSON da un servlet .

2. Maven

Per la nostra applicazione web, includeremo le dipendenze javax.servlet-api e Gson nel nostro pom.xml :

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

Le ultime versioni delle dipendenze possono essere trovate qui: javax.servlet-api e gson.

Abbiamo anche bisogno di configurare un contenitore Servlet in cui distribuire la nostra applicazione. Questo articolo è un buon punto di partenza su come distribuire un WAR su Tomcat.

3. Creazione di un'entità

Creiamo un'entità Employee che verrà successivamente restituita dal Servlet come JSON:

public class Employee { private int id; private String name; private String department; private long salary; // constructors // standard getters and setters. }

4. Entità in JSON

Per inviare una risposta JSON dal Servlet, dobbiamo prima convertire l' oggetto Employee nella sua rappresentazione JSON .

Sono disponibili molte librerie java per convertire un oggetto in una rappresentazione JSON e viceversa. I più importanti di loro sarebbero le biblioteche Gson e Jackson. Per conoscere le differenze tra GSON e Jackson, dai un'occhiata a questo articolo.

Un rapido esempio per convertire un oggetto in una rappresentazione JSON con Gson sarebbe:

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

5. Risposta e tipo di contenuto

Per i servlet HTTP, la procedura corretta per popolare la risposta:

  1. Recupera un flusso di output dalla risposta
  2. Compila le intestazioni delle risposte
  3. Scrive il contenuto nel flusso di output
  4. Impegna la risposta

In una risposta, un'intestazione Content-Type indica al client qual è effettivamente il tipo di contenuto del contenuto restituito.

Per produrre una risposta JSON il tipo di contenuto dovrebbe essere application / json:

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

Le intestazioni di risposta devono essere sempre impostate prima che venga eseguito il commit della risposta. Il contenitore Web ignorerà qualsiasi tentativo di impostare o aggiungere intestazioni dopo il commit della risposta.

La chiamata a flush () su PrintWriter conferma la risposta.

6. Servlet di esempio

Vediamo ora un Servlet di esempio che restituisce una risposta 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. Conclusione

Questo articolo ha mostrato come restituire una risposta JSON da un servlet. Ciò è utile nelle applicazioni Web che utilizzano servlet per implementare i servizi REST.

Tutti gli esempi di codice mostrati qui possono essere trovati su GitHub.