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:
-
Ruft einen Ausgabestream aus der Antwort ab
-
Füllen Sie die Antwort-Header aus
-
Schreiben Sie Inhalte in den Ausgabestream
-
Ü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.