1. Введение
В этом кратком руководстве мы создадим небольшое веб-приложение и изучим, как вернуть ответ JSON от Servlet
.
2. Мавен
Для нашего веб-приложения мы включим зависимости 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-сервлетов правильная процедура заполнения ответа:
- Получить выходной поток из ответа
- Заполните заголовки ответа
- Запись содержимого в выходной поток
- Подтвердить ответ
В ответе заголовок 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 .