From a42c5efdc9dfb71401dcb9cdfbbd8283ef1121ad Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Thu, 3 Nov 2022 11:54:34 +0100 Subject: [PATCH 01/10] RED-5293: 500 for invalid tenant --- .../service/v1/api/model/multitenancy/TenantRequest.java | 1 + .../v1/server/service/TenantManagementService.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java index 8b3a1c525..c5afa21ec 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java @@ -19,6 +19,7 @@ public class TenantRequest { @NotBlank private String displayName; private String guid; + @NotBlank private String jdbcUrl; @NotBlank private String user; diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index a47fcedbc..24c6c9d57 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -2,6 +2,7 @@ package com.iqser.red.service.peristence.v1.server.service; import java.sql.Connection; import java.sql.DriverManager; +import java.time.OffsetDateTime; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -13,9 +14,13 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.core.io.ResourceLoader; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.stereotype.Service; +import org.springframework.web.server.ResponseStatusException; +import com.iqser.red.commons.spring.ErrorMessage; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; @@ -63,6 +68,8 @@ public class TenantManagementService { try (Connection connection = DriverManager.getConnection(tenantRequest.getJdbcUrl(), tenantRequest.getUser(), tenantRequest.getPassword())) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); runLiquibase(tenantDataSource); + } catch (PSQLException e) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage()); } TenantEntity tenantEntity = TenantEntity.builder() From cf32e1684fa22c1081c0b2037777461c275fbd70 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 4 Nov 2022 13:25:39 +0100 Subject: [PATCH 02/10] RED-5293: 500 for invalid tenant --- .../v1/api/model/multitenancy/TenantRequest.java | 4 ++-- .../v1/server/service/TenantManagementService.java | 13 ++++--------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java index c5afa21ec..6ae1ee350 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java @@ -22,8 +22,8 @@ public class TenantRequest { @NotBlank private String jdbcUrl; @NotBlank - private String user; + private String databaseUser; @NotBlank - private String password; + private String databasePassword; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index 24c6c9d57..6606ffcc8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -2,7 +2,6 @@ package com.iqser.red.service.peristence.v1.server.service; import java.sql.Connection; import java.sql.DriverManager; -import java.time.OffsetDateTime; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -14,13 +13,9 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.core.io.ResourceLoader; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.stereotype.Service; -import org.springframework.web.server.ResponseStatusException; -import com.iqser.red.commons.spring.ErrorMessage; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; @@ -63,20 +58,20 @@ public class TenantManagementService { if (tenantRepository.findById(tenantRequest.getTenantId()).isEmpty()) { - String encryptedPassword = encryptionService.encrypt(tenantRequest.getPassword()); + String encryptedPassword = encryptionService.encrypt(tenantRequest.getDatabasePassword()); - try (Connection connection = DriverManager.getConnection(tenantRequest.getJdbcUrl(), tenantRequest.getUser(), tenantRequest.getPassword())) { + try (Connection connection = DriverManager.getConnection(tenantRequest.getJdbcUrl(), tenantRequest.getDatabaseUser(), tenantRequest.getDatabasePassword())) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); runLiquibase(tenantDataSource); } catch (PSQLException e) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, e.getMessage()); + throw new BadRequestException(e.getMessage(), e); } TenantEntity tenantEntity = TenantEntity.builder() .tenantId(tenantRequest.getTenantId()) .displayName(tenantRequest.getDisplayName()) .guid(UUID.randomUUID().toString()) - .username(tenantRequest.getUser()) + .username(tenantRequest.getDatabaseUser()) .jdbcUrl(tenantRequest.getJdbcUrl()) .password(encryptedPassword) .build(); From 8a3439ddf5d7f168d3bc7aa8555980f323d9f553 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 4 Nov 2022 14:39:28 +0100 Subject: [PATCH 03/10] RED-5293: 500 for invalid tenant --- .../service/v1/api/model/multitenancy/TenantRequest.java | 4 ++-- .../v1/server/service/TenantManagementService.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java index 6ae1ee350..c5afa21ec 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java @@ -22,8 +22,8 @@ public class TenantRequest { @NotBlank private String jdbcUrl; @NotBlank - private String databaseUser; + private String user; @NotBlank - private String databasePassword; + private String password; } diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index 6606ffcc8..cb18c6aa8 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -58,9 +58,9 @@ public class TenantManagementService { if (tenantRepository.findById(tenantRequest.getTenantId()).isEmpty()) { - String encryptedPassword = encryptionService.encrypt(tenantRequest.getDatabasePassword()); + String encryptedPassword = encryptionService.encrypt(tenantRequest.getPassword()); - try (Connection connection = DriverManager.getConnection(tenantRequest.getJdbcUrl(), tenantRequest.getDatabaseUser(), tenantRequest.getDatabasePassword())) { + try (Connection connection = DriverManager.getConnection(tenantRequest.getJdbcUrl(), tenantRequest.getUser(), tenantRequest.getPassword())) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); runLiquibase(tenantDataSource); } catch (PSQLException e) { @@ -71,7 +71,7 @@ public class TenantManagementService { .tenantId(tenantRequest.getTenantId()) .displayName(tenantRequest.getDisplayName()) .guid(UUID.randomUUID().toString()) - .username(tenantRequest.getDatabaseUser()) + .username(tenantRequest.getUser()) .jdbcUrl(tenantRequest.getJdbcUrl()) .password(encryptedPassword) .build(); From daf7dd6ba1b5e7f181b6f1e6cc02b4364d956403 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 4 Nov 2022 17:00:18 +0100 Subject: [PATCH 04/10] RED-5293: 500 for invalid tenant --- .../server/controller/ControllerAdvice.java | 6 +-- .../service/TenantManagementService.java | 39 ++++++++++++++++++- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index 0a8515b48..992905dab 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -1,8 +1,8 @@ package com.iqser.red.service.peristence.v1.server.controller; +import java.sql.SQLException; import java.time.OffsetDateTime; -import org.postgresql.util.PSQLException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; @@ -83,8 +83,8 @@ public class ControllerAdvice { @ResponseBody - @ExceptionHandler(value = PSQLException.class) - public ResponseEntity handleSQLException(PSQLException e) { + @ExceptionHandler(value = SQLException.class) + public ResponseEntity handleSQLException(SQLException e) { if (e.getMessage().contains("violates unique constraint")) { return new ResponseEntity<>(new ErrorMessage(OffsetDateTime.now(), "Unique constraint violation"), HttpStatus.CONFLICT); diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index cb18c6aa8..d52907f26 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -1,8 +1,10 @@ package com.iqser.red.service.peristence.v1.server.service; +import java.net.URI; import java.sql.Connection; import java.sql.DriverManager; import java.util.List; +import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -16,7 +18,6 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.jdbc.datasource.SingleConnectionDataSource; import org.springframework.stereotype.Service; -import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.multitenancy.entity.TenantEntity; @@ -28,11 +29,15 @@ import com.iqser.red.service.persistence.service.v1.api.model.multitenancy.Tenan import liquibase.exception.LiquibaseException; import liquibase.integration.spring.SpringLiquibase; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +@Slf4j @Service @EnableConfigurationProperties(LiquibaseProperties.class) public class TenantManagementService { + private static final Set SQL_CONNECTION_ERROR_CODES = Set.of("08000", "08003", "08006"); + private final EncryptionDecryptionService encryptionService; private final LiquibaseProperties liquibaseProperties; @@ -58,13 +63,16 @@ public class TenantManagementService { if (tenantRepository.findById(tenantRequest.getTenantId()).isEmpty()) { + validateJdbcUrl(tenantRequest.getJdbcUrl()); + String encryptedPassword = encryptionService.encrypt(tenantRequest.getPassword()); try (Connection connection = DriverManager.getConnection(tenantRequest.getJdbcUrl(), tenantRequest.getUser(), tenantRequest.getPassword())) { DataSource tenantDataSource = new SingleConnectionDataSource(connection, false); runLiquibase(tenantDataSource); } catch (PSQLException e) { - throw new BadRequestException(e.getMessage(), e); + handleClientException(e); + handleInternalException(e); } TenantEntity tenantEntity = TenantEntity.builder() @@ -82,6 +90,25 @@ public class TenantManagementService { } + private void handleInternalException(PSQLException e) { + + log.error(String.format("Connection to tenant DB failed with SQL state %s. Please check if the tenant DB is still running. " + // + "If yes please check the connection configuration.", e.getSQLState()), e); + throw new RuntimeException("Could not connect to the tenant DB. This is an internal error.", e); + } + + + private void handleClientException(PSQLException e) { + + if (e.getSQLState().equals("28000") || e.getSQLState().equals("28P01")) { + throw new IllegalArgumentException("Database credentials are not correct. Please check them.", e); + } + if (SQL_CONNECTION_ERROR_CODES.contains(e.getSQLState())) { + throw new IllegalArgumentException("Error when connecting to tenant database. Please check the jdbcUrl parameter.", e); + } + } + + public List getTenants() { return tenantRepository.findAll().stream().map(this::convert).collect(Collectors.toList()); @@ -94,6 +121,14 @@ public class TenantManagementService { } + @SneakyThrows + private void validateJdbcUrl(String jdbcUrl) { + // just create a URI object to check if the string is a valid URI + new URI(jdbcUrl); + + } + + private TenantResponse convert(TenantEntity entity) { return TenantResponse.builder() From aa54bb6f3b4986c5be90bf273ff8ff7803bbca1e Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Mon, 7 Nov 2022 13:55:25 +0100 Subject: [PATCH 05/10] RED-5293: 500 for invalid tenant --- .../api/model/multitenancy/TenantRequest.java | 2 +- .../service/TenantManagementService.java | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java index c5afa21ec..281de7100 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class TenantRequest { - @NotNull + @NotNull @NotBlank private String tenantId; @NotBlank private String displayName; diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java index d52907f26..ab713f923 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/TenantManagementService.java @@ -90,6 +90,17 @@ public class TenantManagementService { } + private void handleClientException(PSQLException e) { + + if (e.getSQLState().equals("28000") || e.getSQLState().equals("28P01")) { + throw new IllegalArgumentException("Database credentials are not correct. Please check them."); + } + if (SQL_CONNECTION_ERROR_CODES.contains(e.getSQLState())) { + throw new IllegalArgumentException("Error when connecting to tenant database. Please check the jdbcUrl parameter."); + } + } + + private void handleInternalException(PSQLException e) { log.error(String.format("Connection to tenant DB failed with SQL state %s. Please check if the tenant DB is still running. " + // @@ -98,17 +109,6 @@ public class TenantManagementService { } - private void handleClientException(PSQLException e) { - - if (e.getSQLState().equals("28000") || e.getSQLState().equals("28P01")) { - throw new IllegalArgumentException("Database credentials are not correct. Please check them.", e); - } - if (SQL_CONNECTION_ERROR_CODES.contains(e.getSQLState())) { - throw new IllegalArgumentException("Error when connecting to tenant database. Please check the jdbcUrl parameter.", e); - } - } - - public List getTenants() { return tenantRepository.findAll().stream().map(this::convert).collect(Collectors.toList()); From 2beef30abb7ba26893fbad3db825e32db71450e7 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Mon, 7 Nov 2022 13:58:10 +0100 Subject: [PATCH 06/10] RED-5293: 500 for invalid tenant --- .../service/v1/api/model/multitenancy/TenantRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java index 281de7100..c903032b8 100644 --- a/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java +++ b/persistence-service-v1/persistence-service-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/model/multitenancy/TenantRequest.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class TenantRequest { - @NotNull @NotBlank + @NotBlank private String tenantId; @NotBlank private String displayName; From 5924d12059b8b7ffe417ac4228ef6d2928a64c5d Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Mon, 7 Nov 2022 14:57:26 +0100 Subject: [PATCH 07/10] RED-5293: 500 for invalid tenant --- .../peristence/v1/server/controller/ControllerAdvice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index 992905dab..521b9d927 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -100,7 +100,7 @@ public class ControllerAdvice { @ExceptionHandler(value = MethodArgumentNotValidException.class) public ErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - return new ErrorMessage(OffsetDateTime.now(), e.getMessage()); + return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", e.getParameter())); } } From 034fdd0f65b2d6b1e6cf431f21ae9ad6f3f68112 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Mon, 7 Nov 2022 15:04:30 +0100 Subject: [PATCH 08/10] RED-5293: Changed error message for empty parameters to show client which parameter is broken --- .../peristence/v1/server/controller/ControllerAdvice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index 521b9d927..c9602b0ef 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -100,7 +100,7 @@ public class ControllerAdvice { @ExceptionHandler(value = MethodArgumentNotValidException.class) public ErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", e.getParameter())); + return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", e.getParameter().getParameterName())); } } From 926d324a9072872b4719c855897a64f44b9aacc5 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Mon, 7 Nov 2022 16:13:36 +0100 Subject: [PATCH 09/10] RED-5293: Changed output to client to explain which argument is broken --- .../peristence/v1/server/controller/ControllerAdvice.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index c9602b0ef..6ec665fe7 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -2,6 +2,8 @@ package com.iqser.red.service.peristence.v1.server.controller; import java.sql.SQLException; import java.time.OffsetDateTime; +import java.util.List; +import java.util.stream.Collectors; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -99,8 +101,9 @@ public class ControllerAdvice { @ResponseStatus(value = HttpStatus.BAD_REQUEST) @ExceptionHandler(value = MethodArgumentNotValidException.class) public ErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { - - return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", e.getParameter().getParameterName())); + var errorList = e.getFieldErrors(); + String errorListAsString = errorList.stream().map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()).collect(Collectors.joining(", ")); + return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: \n %s", errorListAsString)); } } From 9b7d1536ebb8bb2056c4e5519c0428f1f865a81e Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Mon, 7 Nov 2022 16:23:53 +0100 Subject: [PATCH 10/10] RED-5293: Changed output to client to explain which argument is broken --- .../peristence/v1/server/controller/ControllerAdvice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java index 6ec665fe7..36adba632 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ControllerAdvice.java @@ -103,7 +103,7 @@ public class ControllerAdvice { public ErrorMessage handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { var errorList = e.getFieldErrors(); String errorListAsString = errorList.stream().map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()).collect(Collectors.joining(", ")); - return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: \n %s", errorListAsString)); + return new ErrorMessage(OffsetDateTime.now(), String.format("You have empty/wrong formatted parameters: %s", errorListAsString)); } }