diff --git a/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/ConstraintViolationExceptionMapper.java b/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/ConstraintViolationExceptionMapper.java new file mode 100644 index 00000000..defc090f --- /dev/null +++ b/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/ConstraintViolationExceptionMapper.java @@ -0,0 +1,53 @@ +package ar.edu.itba.paw.webapp.exceptions; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +@Provider +public class ConstraintViolationExceptionMapper implements ExceptionMapper { + + private static final Logger LOGGER = LoggerFactory.getLogger(ConstraintViolationExceptionMapper.class); + + private static final int LEAF_POSITION = 2; + + @Override + public Response toResponse(final ConstraintViolationException e) { + LOGGER.warn("Exception: {}", (Object[]) e.getStackTrace()); + final StringBuilder responseEntity = new StringBuilder(); + + responseEntity.append("{ errors: [\n"); + for (ConstraintViolation cv : e.getConstraintViolations()) { + final String propertyName; + final String[] propertyNodes = cv.getPropertyPath().toString().split("\\."); + + if(propertyNodes.length == 3) { + propertyName = propertyNodes[LEAF_POSITION]; + } else { + propertyName = propertyNodes[1]; + } + + LOGGER.debug("propertyname = " + propertyName); + + responseEntity.append("{"); + responseEntity + .append("\"") + .append(propertyName) + .append("\"") + .append(":") + .append("\"") + .append(cv.getMessage()) + .append("\"") + .append("},") + .append("\n"); + } + responseEntity.append("] }"); + return Response.status(Response.Status.BAD_REQUEST).entity(responseEntity.toString()).build(); + } + +} diff --git a/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/QueryParamExceptionMapper.java b/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/QueryParamExceptionMapper.java new file mode 100644 index 00000000..4e9afea4 --- /dev/null +++ b/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/QueryParamExceptionMapper.java @@ -0,0 +1,15 @@ +package ar.edu.itba.paw.webapp.exceptions; + +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; + +import static org.glassfish.jersey.server.ParamException.QueryParamException; + +@Provider +public class QueryParamExceptionMapper implements ExceptionMapper { + @Override + public Response toResponse(final QueryParamException exception) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } +} diff --git a/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/ValidationExceptionMapper.java b/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/ValidationExceptionMapper.java deleted file mode 100644 index 8e0b798c..00000000 --- a/webapp/src/main/java/ar/edu/itba/paw/webapp/exceptions/ValidationExceptionMapper.java +++ /dev/null @@ -1,28 +0,0 @@ -package ar.edu.itba.paw.webapp.exceptions; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.ValidationException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -@Provider -public class ValidationExceptionMapper implements ExceptionMapper { - - private static final Logger LOGGER = LoggerFactory.getLogger(ValidationExceptionMapper.class); - - @Override - public Response toResponse(ValidationException e) { - LOGGER.warn("Exception: {}", (Object[]) e.getStackTrace()); - final StringBuilder strBuilder = new StringBuilder(); - for (ConstraintViolation cv : ((ConstraintViolationException) e).getConstraintViolations()) { - strBuilder.append(cv.getPropertyPath()).append(" ").append(cv.getMessage()).append("\n"); - } - return Response.ok().status(Response.Status.INTERNAL_SERVER_ERROR).entity(strBuilder.toString()).build(); - } - -} diff --git a/webapp/src/main/resources/ValidationMessages.properties b/webapp/src/main/resources/ValidationMessages.properties index 2e0b9bc4..b057f486 100644 --- a/webapp/src/main/resources/ValidationMessages.properties +++ b/webapp/src/main/resources/ValidationMessages.properties @@ -1,9 +1,7 @@ -# Jersey Bean Validations - -javax.validation.constraints.Min.message=must be greater than or equal to {value} -javax.validation.constraints.Digits=must have {integer} digits -org.hibernate.validator.constraints.NotBlank=must not be empty -javax.validation.constraints.NotNull=must not be null -javax.validation.constraints.Size=must be between {min} and {max} characters long -javax.validation.constraints.Pattern=must follow the pattern: {regexp} +javax.validation.constraints.Min.message=debe ser igual o mayor a {value} +javax.validation.constraints.Digits.message=debe poseer {integer} dígitos +org.hibernate.validator.constraints.NotBlank.message=no debe estar vacío +javax.validation.constraints.NotNull.message=no debe ser nulo +javax.validation.constraints.Size.message=debe tener entre {min} y {max} caracteres +javax.validation.constraints.Pattern.message=debe poseer la siguiente expresión regular: {regexp}