From 92b35893cd9d08f76f8b705be5657cedba752725 Mon Sep 17 00:00:00 2001 From: Tobias Bruns <tobias.bruns@mgm-tp.com> Date: Mon, 6 Jan 2025 09:07:32 +0100 Subject: [PATCH] OZG-6988 use constraint violation exception --- ...dministrationRepositoryRestConfigurer.java | 5 +-- .../common/DelegatingValidatorAdapter.java | 30 ++++++++++++++++ .../errorhandling/ExceptionController.java | 7 ---- src/main/resources/application.yaml | 36 ++++++++++--------- .../reporting/ReportingSettingITCase.java | 2 -- 5 files changed, 52 insertions(+), 28 deletions(-) create mode 100644 src/main/java/de/ozgcloud/admin/common/DelegatingValidatorAdapter.java diff --git a/src/main/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurer.java b/src/main/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurer.java index 277a9713..31bcf3b8 100644 --- a/src/main/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurer.java +++ b/src/main/java/de/ozgcloud/admin/AdministrationRepositoryRestConfigurer.java @@ -28,7 +28,8 @@ import jakarta.validation.Validation; import org.springframework.context.annotation.Configuration; import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener; import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer; -import org.springframework.validation.beanvalidation.SpringValidatorAdapter; + +import de.ozgcloud.admin.common.DelegatingValidatorAdapter; @Configuration public class AdministrationRepositoryRestConfigurer implements RepositoryRestConfigurer { @@ -36,6 +37,6 @@ public class AdministrationRepositoryRestConfigurer implements RepositoryRestCon @Override public void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener listener) { var validator = Validation.buildDefaultValidatorFactory().getValidator(); - listener.addValidator("beforeCreate", new SpringValidatorAdapter(validator)); + listener.addValidator("beforeCreate", new DelegatingValidatorAdapter(validator)); } } diff --git a/src/main/java/de/ozgcloud/admin/common/DelegatingValidatorAdapter.java b/src/main/java/de/ozgcloud/admin/common/DelegatingValidatorAdapter.java new file mode 100644 index 00000000..ca230a40 --- /dev/null +++ b/src/main/java/de/ozgcloud/admin/common/DelegatingValidatorAdapter.java @@ -0,0 +1,30 @@ +package de.ozgcloud.admin.common; + +import java.util.Objects; + +import jakarta.validation.ConstraintViolationException; + +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class DelegatingValidatorAdapter implements Validator { + + private final jakarta.validation.Validator delegate; + + @Override + public boolean supports(Class<?> clazz) { + return !Objects.isNull(delegate); + } + + @Override + public void validate(Object target, Errors errors) { + var constraintViolations = delegate.validate(target); + if (!constraintViolations.isEmpty()) { + throw new ConstraintViolationException(constraintViolations); + } + } + +} diff --git a/src/main/java/de/ozgcloud/admin/common/errorhandling/ExceptionController.java b/src/main/java/de/ozgcloud/admin/common/errorhandling/ExceptionController.java index a6865a9e..260cad4f 100644 --- a/src/main/java/de/ozgcloud/admin/common/errorhandling/ExceptionController.java +++ b/src/main/java/de/ozgcloud/admin/common/errorhandling/ExceptionController.java @@ -25,7 +25,6 @@ package de.ozgcloud.admin.common.errorhandling; import jakarta.validation.ConstraintViolationException; -import org.springframework.data.rest.core.RepositoryConstraintViolationException; import org.springframework.data.rest.webmvc.ResourceNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.ProblemDetail; @@ -82,10 +81,4 @@ public class ExceptionController extends ResponseEntityExceptionHandler { public ProblemDetail handleConstraintViolationException(ConstraintViolationException e) { return problemDetailMapper.fromConstraintViolationException(e); } - - @ExceptionHandler - public ProblemDetail handleConstraintiolation(RepositoryConstraintViolationException e) { - return ProblemDetail.forStatus(HttpStatus.UNPROCESSABLE_ENTITY); - // TODO map fields to ProblemDetail - } } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index eda94433..0ff2d17a 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -24,6 +24,24 @@ logging: ROOT: WARN '[de.ozgcloud]': INFO +spring: + application: + name: OzgCloud_Administration + data: + mongodb: + authentication-database: admin + rest: + basePath: /api/configuration + cloud: + config: + server: + prefix: /configserver + security: + oauth2: + resourceserver: + jwt: + issuer-uri: ${ozgcloud.oauth2.auth-server-url}/realms/${ozgcloud.oauth2.realm} + management: server: port: 8081 @@ -55,23 +73,7 @@ mongock: - de.ozgcloud.admin.migration enabled: true -spring: - application: - name: OzgCloud_Administration - data: - mongodb: - authentication-database: admin - rest: - basePath: /api/configuration - cloud: - config: - server: - prefix: /configserver - security: - oauth2: - resourceserver: - jwt: - issuer-uri: ${ozgcloud.oauth2.auth-server-url}/realms/${ozgcloud.oauth2.realm} + ozgcloud: keycloak: diff --git a/src/test/java/de/ozgcloud/admin/reporting/ReportingSettingITCase.java b/src/test/java/de/ozgcloud/admin/reporting/ReportingSettingITCase.java index 076a7b93..1f0a50a1 100644 --- a/src/test/java/de/ozgcloud/admin/reporting/ReportingSettingITCase.java +++ b/src/test/java/de/ozgcloud/admin/reporting/ReportingSettingITCase.java @@ -3,7 +3,6 @@ package de.ozgcloud.admin.reporting; import static org.assertj.core.api.Assertions.*; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import org.junit.jupiter.api.BeforeEach; @@ -40,7 +39,6 @@ class ReportingSettingITCase { void shouldHaveLinkToReporting() { mockMvc.perform(get("/api/configuration")) .andExpect(status().is2xxSuccessful()) - .andDo(print()) .andExpect(jsonPath("$._links.aggregationMappings").exists()); } -- GitLab