Revisa a primero esta Wiki [[fdw2.0:fundeweb2.0:gt:rest:manejo_errores_rest|Manejo de errores en servicios REST]]. ====== Mapeo de excepciones en JAX-RS ====== **JAX-RS** define un sistema para capturar y "//mapear//" excepciones para __convertirlas automáticamente__ a objetos **Response**. \\ Esto puede ser útil cuando estamos trabajando con servicios REST con multitud de excepciones posibles (propias o de librerías de terceros) y queremos dar un tratamiento personalizado a alguna excepción. Para crear un //Mapper// de una excepción hay que realizar los siguientes pasos: - Crear una clase que implemente la interfaz **ExceptionMapper**. - Anotar la clase con la notación** @Provider**. - Implementar el método **toResponse**. \\ === 1. Interfaz ExceptionMapper === Debe implementarse la interfaz //**ExceptionMapper**// pasándole como __parámetro la excepción que queremos capturar__. public interface ExceptionMapper { { Response toResponse(E exception); } **__Ejemplo:__** \\ En este ejemplo se captura la excepción __PruebaRestException__. @Provider public class PruebaRestExceptionMapper implements ExceptionMapper \\ === 2. Provider === La notación //**@Provider**// registra la clase en el //runtime// de //**JAX-RS**//. \\ Con esto se consigue capturar la excepción pasada como parámetro a la interfaz tal y como se mostró en el paso 1 (Recordemos la excepción del ejemplo PruebaRestException). Es importante indicar que cuando se lanza una excepción en un servicio REST, //**JAX-RS**// busca en su registro de //providers// un //ExceptionMapper// que capture esta excepción. \\ Si no lo encuentra busca un //ExceptionMapper// que capture la clase de la que hereda la excepción lanzada. \\ Este proceso se repite hasta que encuentre un //Mapper//. **__Ejemplo:__** \\ Tenemos una excepción //HijaPruebaRestExcepction// que extiende //PruebaRestException// vista en el paso 1: \\ public class HijaPruebaRestException extends PruebaRestException Si en nuestro servicio se lanza una instancia de //**HijaPruebaRestException**//, JAX-RS buscará un mapper de esta excepción. \\ Al no encontrarlo, subirá en la herencia y buscará un //mapper// para //PruebaRestException//. \\ Como este //mapper// lo hemos definido en el ejemplo del paso 1, el resultado será que la excepción //**HijaPruebaRestException**// __será capturada por__ //**PruebaRestExceptionMapper**//. \\ === 3. Método toResponse === Para finalizar hay que implementar el método **toResponse**. En este método se capturará la instancia de la excepción que ha sido lanzada y se construirá el objeto Response con la información que queremos que se devuelva. **__Ejemplo:__** @Provider public class EntityNotFoundMapper implements ExceptionMapper { public Response toResponse(EntityNotFoundException e) { return Response.status(Response.Status.NOT_FOUND).build(); } } \\ ===== FAQs ===== ===== Solicitud/Registro de FAQ ===== Pon aquí tus propuestas de FAQs, indicando qué problema tienes, y buscaremos la solución lo antes posible. Si además lo has resuelto, puedes indicar cómo lo has hecho. Formato de petición de FAQ: **Título** //Descripción del problema// //Tecnología afectada (Fundeweb 1/2)// //Cómo reproducir el error// **Solución** //Descripción de la solución// Tus datos de contacto --- //[[correo@umOticarum.es|Tu Nombre]] dd/mm/yyyy // ===== Referencias ===== * [[https://mincong-h.github.io/2018/12/03/exception-handling-in-jax-rs/|Exception Handling in JAX-RS]] * [[https://www.ibm.com/support/knowledgecenter/en/SSAW57_9.0.5/com.ibm.websphere.nd.multiplatform.doc/ae/twbs_jaxrs_defresource_exception_mapper.html|Planning JAX-RS web applications - Defining exception mappers for resource exceptions and errors]] * [[https://www.igorkromin.net/index.php/2017/11/09/a-custom-exception-mapper-and-writer-for-a-restful-jax-rs-jersey-service/|A custom exception mapper and writer for a RESTful JAX-RS Jersey service]] * [[https://howtodoinjava.com/jersey/jaxrs-jersey-exceptionmapper/|Jersey exception handling – Jersey ExceptionMapper Example]] * [[https://www.bhaveshthaker.com/25/customize-handling-server-side-exceptions-with-error-codes-using-exceptionmapper-with-jersey-jax-rs-in-java/|Customize / Handling Server Side Exceptions with Error Codes using ExceptionMapper with Jersey / JAX-RS in Java]] * [[https://www.codepedia.org/ama/error-handling-in-rest-api-with-jersey/|Error handling in REST API with Jersey]] * [[fdw2.0:fundeweb2.0:gt:rest:manejo_errores_rest|Manejo de errores en servicios REST]] ---- --- //[[ramon.ginel@ticarum.es|RAMON GINEL GEA]] 19/07/2019 10:10//