Возвращение ответа JSON из сервлета

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

1. Вступление

В этом кратком руководстве мы создадим небольшое веб-приложение и узнаем, как вернуть ответ JSON отServlet.

2. специалист

Для нашего веб-приложения мы включим зависимостиjavax.servlet-api и Gson в нашpom.xml:


    javax.servlet
    javax.servlet-api
    ${javax.servlet.version}


    com.google.code.gson
    gson
    ${gson.version}

Последние версии зависимостей можно найти здесь:javax.servlet-api иgson.

Нам также необходимо настроить контейнер сервлетов для развертывания нашего приложения. This article - хорошее место для начала развертывания WAR на Tomcat.

3. Создание сущности

Давайте создадим объектEmployee, который позже будет возвращен изServlet как JSON:

public class Employee {

    private int id;

    private String name;

    private String department;

    private long salary;

    // constructors
    // standard getters and setters.
}

4. Сущность в JSON

Чтобы отправить ответ JSON отServlet, нам сначала нужноconvert the Employee object into its JSON representation.

Есть много библиотек Java, доступных для преобразования объекта в представление JSON и наоборот. Наиболее выдающимися из них будут библиотеки Гсона и Джексона. Чтобы узнать о различиях между GSON и Jackson, взгляните наthis article.

Быстрый пример для преобразования объекта в представление 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. Пример сервлета

Теперь давайте посмотрим на примерServlet, который возвращает ответ 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.

Все показанные здесь примеры кода могут бытьfound on GitHub.