Retornando uma resposta JSON de um servlet

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:

  1. Recuperar um fluxo de saída da resposta

  2. Preencha os cabeçalhos de resposta

  3. Gravar conteúdo no fluxo de saída

  4. 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.