From 98d18c0233c164fe857231d0353a681d60578d86 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 29 Nov 2018 11:55:04 -0700 Subject: [PATCH] [SHIBUI-996] Added exception handler for database constraint exception. Added i18n error message. --- .../ui/controller/support/RestControllersSupport.java | 8 ++++++++ backend/src/main/resources/i18n/messages.properties | 1 + backend/src/main/resources/i18n/messages_en.properties | 1 + 3 files changed, 10 insertions(+) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java index 1605b86dd..899a5b9e5 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/support/RestControllersSupport.java @@ -1,14 +1,17 @@ package edu.internet2.tier.shibboleth.admin.ui.controller.support; import com.google.common.collect.ImmutableMap; +import edu.internet2.tier.shibboleth.admin.ui.controller.ErrorResponse; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; +import org.hibernate.exception.ConstraintViolationException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.client.HttpClientErrorException; +import static org.springframework.http.HttpStatus.BAD_REQUEST; import static org.springframework.http.HttpStatus.NOT_FOUND; /** @@ -38,4 +41,9 @@ public ResponseEntity notFoundHandler(HttpClientErrorException ex) { } throw ex; } + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity handleDatabaseConstraintViolation(ConstraintViolationException ex) { + return ResponseEntity.status(BAD_REQUEST).body(new ErrorResponse("400", "message.database-constraint")); + } } diff --git a/backend/src/main/resources/i18n/messages.properties b/backend/src/main/resources/i18n/messages.properties index 31c4de9b8..f3068bdc3 100644 --- a/backend/src/main/resources/i18n/messages.properties +++ b/backend/src/main/resources/i18n/messages.properties @@ -397,6 +397,7 @@ message.wizard-status=Step { index } of { length } message.entity-id-min-unique=You must add at least one entity id target and they must each be unique. message.required-for-scripts=Required for Scripts message.required-for-regex=Required for Regex +message.database-constraint=There was a database constraint problem processing the request. Check the request to insure that fields that must be unique are truly unique. tooltip.entity-id=Entity ID tooltip.service-provider-name=Service Provider Name (Dashboard Display Only) diff --git a/backend/src/main/resources/i18n/messages_en.properties b/backend/src/main/resources/i18n/messages_en.properties index 3d44ca8eb..74edcc0a3 100644 --- a/backend/src/main/resources/i18n/messages_en.properties +++ b/backend/src/main/resources/i18n/messages_en.properties @@ -398,6 +398,7 @@ message.wizard-status=Step { index } of { length } message.entity-id-min-unique=You must add at least one entity id target and they must each be unique. message.required-for-scripts=Required for Scripts message.required-for-regex=Required for Regex +message.database-constraint=There was a database constraint problem processing the request. Check the request to insure that fields that must be unique are truly unique. tooltip.entity-id=Entity ID tooltip.service-provider-name=Service Provider Name (Dashboard Display Only)