«1. Введение
В этом кратком руководстве мы создадим небольшое веб-приложение и изучим, как вернуть ответ JSON от сервлета.
2. Maven
Для нашего веб-приложения мы включим зависимости javax.servlet-api и Gson в наш pom.xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${javax.servlet.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>${gson.version}</version>
</dependency>
Последние версии зависимостей можно найти здесь: javax .servlet-api и gson.
Нам также нужно настроить контейнер сервлетов для развертывания нашего приложения. Эта статья — хорошее место для начала развертывания WAR на Tomcat.
3. Создание сущности
Давайте создадим сущность Employee, которая позже будет возвращена сервлетом в виде JSON:
public class Employee {
private int id;
private String name;
private String department;
private long salary;
// constructors
// standard getters and setters.
}
4. Сущность в JSON
Чтобы отправить ответ JSON от сервлета, мы сначала необходимо преобразовать объект Employee в его представление JSON.
Существует множество библиотек Java для преобразования объекта в JSON-представление и наоборот. Наиболее известными из них будут библиотеки Гсона и Джексона. Чтобы узнать о различиях между GSON и Jackson, ознакомьтесь с этой статьей.
Быстрый пример преобразования объекта в представление JSON с помощью Gson:
String employeeJsonString = new Gson().toJson(employee);
5. Ответ и тип содержимого
Для сервлетов HTTP правильная процедура заполнения ответа:
- Retrieve an output stream from the response
- Fill in the response headers
- Write content to the output stream
- Commit the response
В ответ, заголовок Content-Type сообщает клиенту, каков на самом деле тип возвращаемого контента.
Для создания ответа JSON тип содержимого должен быть application/json:
PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();
Заголовки ответа всегда должны быть установлены до фиксации ответа. Веб-контейнер будет игнорировать любые попытки установить или добавить заголовки после фиксации ответа.
Вызов flush() в PrintWriter фиксирует ответ.
6. Пример сервлета
Теперь давайте рассмотрим пример сервлета, который возвращает ответ 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. Заключение
В этой статье показано, как вернуть ответ JSON от сервлета. Это полезно в веб-приложениях, использующих сервлеты для реализации служб REST.
Все показанные здесь примеры кода можно найти на GitHub.