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?
Mike
Fevereiro 28, 2019, 4:50pm
#2
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 {
…
}
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
Resolvi o problema criando uma classe Integer personalizada para aceitar null…
Segue resolução:
@GET @Path ("/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;
}
}
1 curtida