Ir para o conteúdo

Exemplo Servlet

Faremos um Servlet para buscar uma entidade pelo código recebido pelo corpo da requisição.

Criando um servlet

Para criar um servlet abra o SAMDev, escolha o package, clique com o botão direito->Novo->Servlet

Criando servlet

Criará uma classe padrão

public class BuscarEntidade extends ServletBase {

    @Override
    public String getNome() throws Exception {
        return null;
    }

    @Override
    public DashboardMetadata getMetadata() throws Exception {
        return null;
    }

    @Override
    public ResponseEntity<Object> executar() {
        return ResponseEntity.ok()
            .contentType(MediaType.APPLICATION_JSON)
            .body(null);
    }
}
  • getNome : Retorna o nome do Servlet.
  • getMetadata : Retorna dados do Servlet.
  • executar : função onde ficará a logica do Servlet.

Buscando a entidade

Vamos alterar o metodo executar para receber o código, buscar a enidade e retornar a entidade pelo response da requisição.

class BuscarEntidade extends ServletBase{
    @Override
    String getNome() throws Exception {
        return "Buscar Entidade"
    }

    @Override
    DashboardMetadata getMetadata() throws Exception {
        return null
    }

    @Override
    ResponseEntity<Object> executar() throws Exception {
        String req = httpServletRequest.getReader().lines().collect(Collectors.joining());
        TableMap body = JSonMapperCreator.create().read(req, new TypeReference<TableMap>() {});

        String abe01codigo = body.getString("abe01codigo");

       Abe01 abe01 = getSession().createCriteria(Abe01.class)
                .addFields("abe01id, abe01codigo, abe01na")
                .addWhere(Criterions.eq("abe01codigo", abe01codigo))
                .get(ColumnType.ENTITY)

        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_JSON)
                .body(abe01);
    }
}
  • httpServletRequest.getReader().lines().collect(Collectors.joining()); : Le todo o conteúdo do corpo da requisição HTTP (geralmente enviado via POST ou PUT) como uma única String.

  • TableMap body = JSonMapperCreator.create().read(req, new TypeReference<TableMap>() {}); : Fazer o parse do JSON (contido na string req) para um objeto da classe TableMap.

Acessando o Servlet

Acessando via Insomnia

Realizando uma request para o servler usando um programa externo como o Insomnia

Request insomnia Headers insomnia

Response insomnia

Acessando via Script de operações

public class ScriptAntigo extends ScriptBase {
    MultitecRootPanel tarefa
    @Override
    void execute(MultitecRootPanel panel) {
        tarefa = panel
        criarMenu("Servlet", "Buscar Entidade", e -> buscarEntidade(), null)
    }

    private void buscarEntidade(){
        String json = '{"abe01codigo": "01"}'
        ObjectMapper mapper = new ObjectMapper();
        JsonNode body = mapper.readTree(json);
        WorkerRequest.create(this.tarefa.getWindow())
        .initialText("Buscando Entidade")
        .dialogVisible(true)
        .controllerEndPoint("servlet")
        .methodEndPoint("run")
        .param("name", "equilibrio.separador.BuscarEntidade")
        .header("ignore-body-decrypt", "true")
        .parseBody(body)
        .success((response) -> {
            Abe01 abe01 = response.parseResponse(new TypeReference<Abe01>(){});
            exibirInformacao("codigo: " + abe01.abe01codigo + ", na: " + abe01.abe01na)
        })
        .post();

    }
}

Response script