Перейти к основному содержимому

Возврат ответа JSON от сервлета

· 2 мин. чтения

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-сервлетов правильная процедура заполнения ответа:

  1. Получить выходной поток из ответа
  2. Заполните заголовки ответа
  3. Запись содержимого в выходной поток
  4. Подтвердить ответ

В ответе заголовок 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 .