Retornando uma resposta JSON de um servlet
1. Introdução
Neste tutorial rápido, criaremos um pequeno aplicativo da web e exploraremos como retornar uma resposta JSON de umServlet.
2. Maven
Para nosso aplicativo da web, incluiremos as dependênciasjavax.servlet-apie Gson em nossopom.xml:
javax.servlet
javax.servlet-api
${javax.servlet.version}
com.google.code.gson
gson
${gson.version}
As versões mais recentes das dependências podem ser encontradas aqui:javax.servlet-apiegson.
Também precisamos configurar um contêiner de Servlet para implantar nosso aplicativo. This article é um bom lugar para começar a implantar um WAR no Tomcat.
3. Criando uma entidade
Vamos criar uma entidadeEmployee que mais tarde será retornada deServlet como JSON:
public class Employee {
private int id;
private String name;
private String department;
private long salary;
// constructors
// standard getters and setters.
}
4. Entidade para JSON
Para enviar uma resposta JSON deServlet, primeiro precisamosconvert the Employee object into its JSON representation.
Existem muitas bibliotecas java disponíveis para converter um objeto para a representação JSON e vice-versa. Os mais proeminentes deles seriam as bibliotecas Gson e Jackson. Para saber mais sobre as diferenças entre GSON e Jackson, dê uma olhada emthis article.
Uma amostra rápida para converter um objeto em representação JSON com o Gson seria:
String employeeJsonString = new Gson().toJson(employee);
5. Resposta e tipo de conteúdo
Para Servlets HTTP, o procedimento correto para preencher a resposta:
-
Recuperar um fluxo de saída da resposta
-
Preencha os cabeçalhos de resposta
-
Gravar conteúdo no fluxo de saída
-
Confirme a resposta
Em uma resposta, um cabeçalhoContent-Type informa ao cliente qual é realmente o tipo de conteúdo retornado.
Para produzir uma resposta JSON, o tipo de conteúdo deve serapplication/json:
PrintWriter out = response.getWriter();
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out.print(employeeJsonString);
out.flush();
Os cabeçalhos de resposta sempre devem ser definidos antes que a resposta seja confirmada. O contêiner da web irá ignorar qualquer tentativa de definir ou adicionar cabeçalhos após a confirmação da resposta.
Chamarflush() emPrintWriter confirma a resposta.
6. Servlet de exemplo
Agora vamos ver um exemploServlet que retorna uma resposta 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. Conclusão
Este artigo mostrou como retornar uma resposta JSON de um servlet. Isso é útil em aplicativos da web que usam Servlets para implementar serviços REST.
Todos os exemplos de código mostrados aqui podem serfound on GitHub.