From f34ea4ece1297d715c5dfa1811412353dc68877d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 26 Oct 2018 09:47:30 +0200 Subject: [PATCH] Let validation error dto inherit from 'normal' error --- .../scm/api/v2/ValidationExceptionMapper.java | 22 ++++++++++++------- .../sonia/scm/api/v2/resources/ErrorDto.java | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationExceptionMapper.java index c6af6b8921..8cd2c6d649 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationExceptionMapper.java @@ -2,6 +2,8 @@ package sonia.scm.api.v2; import lombok.Getter; import org.jboss.resteasy.api.validation.ResteasyViolationException; +import org.slf4j.MDC; +import sonia.scm.api.v2.resources.ErrorDto; import javax.validation.ConstraintViolation; import javax.ws.rs.core.MediaType; @@ -11,46 +13,50 @@ import javax.ws.rs.ext.Provider; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import static java.util.Collections.emptyList; + @Provider public class ValidationExceptionMapper implements ExceptionMapper { @Override public Response toResponse(ResteasyViolationException exception) { - List violations = + List violations = exception.getConstraintViolations() .stream() - .map(ConstraintViolationBean::new) + .map(ConstraintViolationDto::new) .collect(Collectors.toList()); return Response .status(Response.Status.BAD_REQUEST) .type(MediaType.APPLICATION_JSON_TYPE) - .entity(new ValidationError(violations)) + .entity(new ValidationErrorDto(violations)) .build(); } @Getter - public static class ValidationError { + public static class ValidationErrorDto extends ErrorDto { @XmlElement(name = "violation") @XmlElementWrapper(name = "violations") - private List violations; + private List violations; - public ValidationError(List violations) { + public ValidationErrorDto(List violations) { + super(MDC.get("transaction_id"), "1wR7ZBe7H1", emptyList(), "input violates conditions (see violation list)"); this.violations = violations; } } @XmlRootElement(name = "violation") @Getter - public static class ConstraintViolationBean { + public static class ConstraintViolationDto { private String path; private String message; - public ConstraintViolationBean(ConstraintViolation violation) { + public ConstraintViolationDto(ConstraintViolation violation) { message = violation.getMessage(); path = violation.getPropertyPath().toString(); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java index 48aa158451..df8a33684b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java @@ -18,7 +18,7 @@ public class ErrorDto { @JsonInclude(JsonInclude.Include.NON_NULL) private final String url; - private ErrorDto(String transactionId, String errorCode, List context, String message) { + protected ErrorDto(String transactionId, String errorCode, List context, String message) { this(transactionId, errorCode, context, message, null); } private ErrorDto(String transactionId, String errorCode, List context, String message, String url) {