Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Retorno do GET quando recurso não é localizado

Boa tarde!!

Gostaria de saber qual o (Status Code/Response) que deve ser retornado quando o recurso não é localizado?

Por exemplo o DAO não retorna o objeto do banco com o id vindo do GET.

Ou deve se apenas retornar uma string? da forma que está no curso.

Obrigado

3 respostas

Olá André Santos, aqui na empresa, utilizamos como resposta em tais casos, um Response com código 404 e uma mensagem relativa ao erro que aconteceu.

Ok, Emerson, obrigado pelo retorno.

Por gentileza, tem algum exemplo?

Obrigado

solução!

Tenho sim, exemplo usando o RestEasy e o Swagger para documentação...

@GET
    @RolesAllowed("USER")
    @RequisicaoRestPadrao
    @Path("{nome}")
    @Produces("application/json; charset=UTF-8")
    @ApiOperation(value = "Retorna as informações do usuário, dado o nome!", httpMethod = "GET", response = Response.class)
    @ApiResponses(value = { @ApiResponse(code = 200, message = "Retorna true"),
            @ApiResponse(code = 401, message = "Servidor sem direito de acesso ao Sisport"),
            @ApiResponse(code = 404, message = "Servidor não encontrado!"),
            @ApiResponse(code = 500, message = "Erro interno no Servidor!") })
    public Response obtemUsuario(@PathParam("nome") String nomeServidor, @HeaderParam("token") String token)
            throws RestSisportException {

        Usuario usuario = null;

        usuario = usuarioService.recuperaUsuario(nomeServidor);

        return Response.ok(usuario, MediaType.APPLICATION_JSON).build();

    }

E aqui a parte que te interessa, o interceptador que criamos para obter o erro e enviar como resposta:

@AroundInvoke
    public Object invoke(InvocationContext context) throws Exception {

        try {
            return context.proceed();
        }catch (RestSisportException restSisportException) {
            return Response.status(restSisportException.getStatusHttp()).entity(sisportResource.getOutputJson(restSisportException.getMensagem())).build();
        } 
        catch (Exception e) {
            return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(sisportResource.getOutputJson("Erro Interno no Servidor")).build();
        }
    }