Rückgabe einer JSON-Antwort von einem Servlet

JSON-Antwort von einem Servlet zurückgeben

1. Einführung

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

2. Maven

Für unsere Webanwendung nehmen wirjavax.servlet-api und Gson-Abhängigkeiten in unserepom.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 undgson.

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

3. Eine Entität erstellen

Erstellen wir eineEmployee-Entität, die später von denServlet 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 vonServlet zu senden, müssen wir zuerstconvert the Employee object into its JSON representation senden.

Es stehen viele Java-Bibliotheken zur Verfügung, um ein Objekt in eine JSON-Darstellung zu konvertieren und umgekehrt. Am bekanntesten wären die Gson- und Jackson-Bibliotheken. Um mehr über die Unterschiede zwischen GSON und Jackson zu erfahren, schauen Sie sichthis article an.

Ein schnelles 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 Ausfüllen der Antwort:

  1. Ruft einen Ausgabestream aus der Antwort ab

  2. Füllen Sie die Antwort-Header aus

  3. Schreiben Sie Inhalte in den Ausgabestream

  4. Übernehmen Sie die Antwort

In einer Antwort teilt der Header vonContent-Typedem Client mit, welcher Inhaltstyp des zurückgegebenen Inhalts tatsächlich ist.

Für die Erstellung einer JSON-Antwort sollte der Inhaltstypapplication/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.

Wenn Sieflush() aufPrintWriter aufrufen, wird die Antwort festgeschrieben.

6. Beispiel Servlet

Sehen wir uns nun ein BeispielServlet an, das eine JSON-Antwort zurückgibt:

@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-Diensten verwenden.

Alle hier gezeigten Codebeispiele könnenfound on GitHub sein.