diff --git a/src/org/kar/archidata/catcher/ConstraintViolationExceptionCatcher.java b/src/org/kar/archidata/catcher/ConstraintViolationExceptionCatcher.java new file mode 100644 index 0000000..6e3f520 --- /dev/null +++ b/src/org/kar/archidata/catcher/ConstraintViolationExceptionCatcher.java @@ -0,0 +1,26 @@ +package org.kar.archidata.catcher; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.validation.ConstraintViolationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; + +public class ConstraintViolationExceptionCatcher implements ExceptionMapper { + private static final Logger LOGGER = LoggerFactory.getLogger(ConstraintViolationExceptionCatcher.class); + + @Override + public Response toResponse(final ConstraintViolationException exception) { + LOGGER.warn("Catch ConstraintViolationException: {}", exception.getLocalizedMessage()); + final RestErrorResponse ret = build(exception); + LOGGER.error("Error OID={}", ret.oid); + return Response.status(Response.Status.BAD_REQUEST).entity(ret).type(MediaType.APPLICATION_JSON).build(); + } + + private RestErrorResponse build(final ConstraintViolationException exception) { + return new RestErrorResponse(Response.Status.BAD_REQUEST, "Constraint Violation", exception.getMessage()); + } + +} diff --git a/src/org/kar/archidata/catcher/GenericCatcher.java b/src/org/kar/archidata/catcher/GenericCatcher.java index 2adc85c..9de31c1 100644 --- a/src/org/kar/archidata/catcher/GenericCatcher.java +++ b/src/org/kar/archidata/catcher/GenericCatcher.java @@ -19,6 +19,7 @@ public class GenericCatcher { rc.register(FailExceptionCatcher.class); // generic Exception catcher rc.register(ExceptionCatcher.class); + rc.register(ConstraintViolationExceptionCatcher.class); } }