jueves, 8 de marzo de 2018

Desarrollo RESTful WebService APIs with JAX-RS Parte 4

Manejando Excepciones

github https://github.com/jalbertomr/RESTfulWebServiceJAX-RSMaven.git

Si se solicita un mensaje inexistente no ocurre nada, por ello controlaremos el error con excepciones.



public Message getMessage(long id) {
    Message message = messages.get(id);
    if( message == null ){
        throw new DataNotFoundException("mensaje con Id = " + id + " no existe.");
    }
    return message;
}

Se Define DataNotFoundException

public class DataNotFoundException extends RuntimeException {

    public DataNotFoundException(String message) {
        super(message);
    }
}



Ahora capturaremos la excepción Mapeandola y la formatearmos a nuestro gusto.

Definimos el Mapper y la respuesta.

@Provider
public class DataNotFoundExceptionMapper implements ExceptionMapper<DataNotFoundException> {
    @Override    public Response toResponse(DataNotFoundException e) {
        ErrorMessage errorMessage = new ErrorMessage(e.getMessage(),404,"https://www.blogger.com/jalbertomr");
        return Response.status(Response.Status.NOT_FOUND)
                .entity(errorMessage)
                .build();
    }
}


Podemos capturar una gama de excepciones haciendo ExceptionMappers especificos para cada una de ellas, que implica mucha talacha. Una alternativa es hacer una excepción Genérica, que atrape a todas esas excepciones que pueden subir hasta jersey.

Por ejemplo un uri no mapeado, generaría un error que mostraría jersey así


Haciendo una clase de Excepción Genérica como está

@Providerpublic class GenericExceptionMapper implements ExceptionMapper<Throwable> {
    @Override    public Response toResponse(Throwable ex) {
        ErrorMessage errorMessage = new ErrorMessage(ex.getMessage(), 500, "https://www.blogger.com/jalbertomr");
        return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                .entity(errorMessage)
                .build();
    }
}

Tenemos ahora sí, capturada la excepción de un Uri no mappeado capturado por la aplicación.


Es necesario reiniciar el web server ya que la anotación @Provider le indica al servidor donde obtener esta clase.



fin texto.


No hay comentarios:

Publicar un comentario