RESOLVIDO - REST - Passar null para um parâmetro Integer

4 respostas
rest
B

Tenho a seguinte situação no meu REST (Jersey):

http://localhost:8080/api/listar_log_utilizacao/null

@GET @Path("/listar_log_utilizacao/{idUsuario: .*}")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response listarLogUtilizacao(@PathParam("idUsuario") Integer idUsuario) throws Exception  {
...
}

Valores inteiros são recebidos sem problemas, porém, nessa situação, o parâmetro é opcional e quando vem null como parâmetro dá erro 404…
Existe alguma forma de passar null como parâmetro?

4 Respostas

Mike

Boa tarde,
Troca a anotação @PathParam por @QueryParam e retira o parâmetro da url no @Path

@Path("/listar_log_utilizacao")
@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response listarLogUtilizacao(@QueryParam("idUsuario") Integer idUsuario) throws Exception {

}
B

Boa tarde!
Retirando o parâmetro da URL ele funciona da forma que está…
Assim funciona:
http://localhost:8080/api/listar_log_utilizacao//
Porém, preciso passar assim:
http://localhost:8080/api/listar_log_utilizacao/null

B

http://localhost:8080/api/listar_log_utilizacao?idUsuario=null

B

Resolvi o problema criando uma classe Integer personalizada para aceitar null…
Segue resolução:

<a class="mention" href="/u/get">@GET</a> <a class="mention" href="/u/path">@Path</a>("/listar_log_utilizacao/{idUsuario: .*}")

@Consumes(MediaType.APPLICATION_JSON)

@Produces(MediaType.APPLICATION_JSON)

public Response listarLogUtilizacao(@PathParam(“idUsuario”) IntegerParam idUsuario) throws Exception  {

…

}
Classe Java:

public class IntegerParam implements IServer {

private Integer number = null;

public IntegerParam(String number) throws WebApplicationException {

try {

if ((number.equals(null)) || (number.isEmpty())) {

return;

}

// Converter String em Integer

if (util.isInteger(number)) {

this.number = util.toInt(number);

return;

}

} catch (Exception e) {

throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity("Couldn’t parse to Integer: " + e.getMessage()).build());

}

}
public Integer getInteger() {
	return this.number;
}

}

Criado 28 de fevereiro de 2019
Ultima resposta 1 de mar. de 2019
Respostas 4
Participantes 3