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
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
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();
}
}