1. Introducción
En este tutorial rápido, crearemos una pequeña aplicación web y exploraremos cómo devolver una respuesta JSON desde un Servlet .
2. Maven
Para nuestra aplicación web, incluiremos las dependencias javax.servlet-api y Gson en nuestro pom.xml :
javax.servlet javax.servlet-api ${javax.servlet.version} com.google.code.gson gson ${gson.version}
Las últimas versiones de las dependencias se pueden encontrar aquí: javax.servlet-api y gson.
También necesitamos configurar un contenedor Servlet para implementar nuestra aplicación. Este artículo es un buen lugar para comenzar sobre cómo implementar un WAR en Tomcat.
3. Creación de una entidad
Creemos una entidad de empleado que luego se devolverá desde el servlet como JSON:
public class Employee { private int id; private String name; private String department; private long salary; // constructors // standard getters and setters. }
4. Entidad a JSON
Para enviar una respuesta JSON desde el Servlet , primero debemos convertir el objeto Employee en su representación JSON .
Hay muchas bibliotecas de Java disponibles para convertir un objeto a su representación JSON y viceversa. Las más destacadas serían las bibliotecas Gson y Jackson. Para conocer las diferencias entre GSON y Jackson, eche un vistazo a este artículo.
Una muestra rápida para convertir un objeto en representación JSON con Gson sería:
String employeeJsonString = new Gson().toJson(employee);
5. Respuesta y tipo de contenido
Para los servlets HTTP, el procedimiento correcto para completar la respuesta:
- Recuperar un flujo de salida de la respuesta
- Complete los encabezados de respuesta
- Escribir contenido en el flujo de salida
- Confirma la respuesta
En una respuesta, un encabezado Content-Type le dice al cliente cuál es realmente el tipo de contenido del contenido devuelto.
Para producir una respuesta JSON, el tipo de contenido debe ser application / json:
PrintWriter out = response.getWriter(); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); out.print(employeeJsonString); out.flush();
Los encabezados de respuesta siempre deben establecerse antes de que se confirme la respuesta. El contenedor web ignorará cualquier intento de establecer o agregar encabezados después de que se confirme la respuesta.
Llamar a flush () en PrintWriter confirma la respuesta.
6. Servlet de ejemplo
Ahora veamos un Servlet de ejemplo que devuelve una respuesta 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. Conclusión
Este artículo mostró cómo devolver una respuesta JSON desde un Servlet. Esto es útil en aplicaciones web que usan Servlets para implementar servicios REST.
Todos los ejemplos de código que se muestran aquí se pueden encontrar en GitHub.