Rückgabe einer JSON-Antwort von einem Servlet

1. Einleitung

In diesem kurzen Tutorial erstellen wir eine kleine Webanwendung und untersuchen, wie eine JSON-Antwort von einem Servlet zurückgegeben wird .

2. Maven

Für unsere Webanwendung nehmen wir die Abhängigkeiten von javax.servlet -api und Gson in unsere pom.xml auf :

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

Die neuesten Versionen der Abhängigkeiten finden Sie hier: javax.servlet-api und gson.

Wir müssen auch einen Servlet-Container konfigurieren, auf dem unsere Anwendung bereitgestellt werden soll. Dieser Artikel ist ein guter Ausgangspunkt für die Bereitstellung eines WAR auf Tomcat.

3. Erstellen einer Entität

Erstellen wir eine Employee- Entität, die später vom Servlet als JSON zurückgegeben wird:

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

4. Entität zu JSON

Um eine JSON-Antwort vom Servlet zu senden, müssen wir zuerst das Employee- Objekt in seine JSON-Darstellung konvertieren .

Es stehen viele Java-Bibliotheken zur Verfügung, um ein Objekt in die JSON-Darstellung zu konvertieren und umgekehrt. Am bekanntesten wären die Bibliotheken von Gson und Jackson. In diesem Artikel erfahren Sie mehr über die Unterschiede zwischen GSON und Jackson.

Ein kurzes Beispiel für die Konvertierung eines Objekts in eine JSON-Darstellung mit Gson wäre:

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

5. Antwort und Inhaltstyp

Für HTTP-Servlets das richtige Verfahren zum Auffüllen der Antwort:

  1. Rufen Sie einen Ausgabestream aus der Antwort ab
  2. Füllen Sie die Antwortheader aus
  3. Schreiben Sie Inhalte in den Ausgabestream
  4. Übernehmen Sie die Antwort

In einer Antwort teilt ein Content-Type- Header dem Client mit, welcher Inhaltstyp der zurückgegebene Inhalt tatsächlich ist.

Für die Erstellung einer JSON-Antwort sollte der Inhaltstyp application / json sein:

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

Antwortheader müssen immer festgelegt werden, bevor die Antwort festgeschrieben wird. Der Webcontainer ignoriert jeden Versuch, Header festzulegen oder hinzuzufügen, nachdem die Antwort festgeschrieben wurde.

Durch Aufrufen von flush () auf dem PrintWriter wird die Antwort festgeschrieben .

6. Beispielservlet

Nun sehen wir ein Beispiel Servlets , dass die Rendite eine JSON - Antwort:

@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. Fazit

In diesem Artikel wurde gezeigt, wie eine JSON-Antwort von einem Servlet zurückgegeben wird. Dies ist hilfreich in Webanwendungen, die Servlets zum Implementieren von REST-Services verwenden.

Alle hier gezeigten Codebeispiele finden Sie auf GitHub.