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//