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