diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml
index 2046b38810..5650f9c700 100644
--- a/spring-security-rest/pom.xml
+++ b/spring-security-rest/pom.xml
@@ -139,7 +139,26 @@
-
+
+ org.springframework
+ spring-test
+ ${org.springframework.version}
+ test
+
+
+
+ com.jayway.restassured
+ rest-assured
+ ${rest-assured.version}
+ test
+
+
+ commons-logging
+ commons-logging
+
+
+
+
junit
junit
@@ -276,6 +295,7 @@
1.3
4.12
1.10.19
+ 2.4.1
2.2.2
diff --git a/spring-security-rest/src/main/java/org/baeldung/web/ApiError.java b/spring-security-rest/src/main/java/org/baeldung/web/ApiError.java
new file mode 100644
index 0000000000..8352ca4ccd
--- /dev/null
+++ b/spring-security-rest/src/main/java/org/baeldung/web/ApiError.java
@@ -0,0 +1,63 @@
+package org.baeldung.web;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.springframework.http.HttpStatus;
+
+public class ApiError {
+
+ private HttpStatus status;
+ private String message;
+ private List errors;
+
+ //
+
+ public ApiError() {
+ super();
+ }
+
+ public ApiError(final HttpStatus status, final String message, final List errors) {
+ super();
+ this.status = status;
+ this.message = message;
+ this.errors = errors;
+ }
+
+ public ApiError(final HttpStatus status, final String message, final String error) {
+ super();
+ this.status = status;
+ this.message = message;
+ errors = Arrays.asList(error);
+ }
+
+ //
+
+ public HttpStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(final HttpStatus status) {
+ this.status = status;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(final String message) {
+ this.message = message;
+ }
+ public List getErrors() {
+ return errors;
+ }
+
+ public void setErrors(final List errors) {
+ this.errors = errors;
+ }
+
+ public void setError(final String error) {
+ errors = Arrays.asList(error);
+ }
+
+}
diff --git a/spring-security-rest/src/main/java/org/baeldung/web/CustomRestExceptionHandler.java b/spring-security-rest/src/main/java/org/baeldung/web/CustomRestExceptionHandler.java
new file mode 100644
index 0000000000..b6e7a919b9
--- /dev/null
+++ b/spring-security-rest/src/main/java/org/baeldung/web/CustomRestExceptionHandler.java
@@ -0,0 +1,152 @@
+package org.baeldung.web;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.beans.TypeMismatchException;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.HttpMediaTypeNotSupportedException;
+import org.springframework.web.HttpRequestMethodNotSupportedException;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
+import org.springframework.web.multipart.support.MissingServletRequestPartException;
+import org.springframework.web.servlet.NoHandlerFoundException;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+@ControllerAdvice
+public class CustomRestExceptionHandler extends ResponseEntityExceptionHandler {
+
+ // 400
+
+ @Override
+ protected ResponseEntity