Возврат ответа 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-сервлетов правильная процедура заполнения ответа:
-
Получить выходной поток из ответа
-
Заполните заголовки ответа
-
Записать содержимое в выходной поток
-
Зафиксируйте ответ
В ответе заголовок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.