Преглед на файлове

Add error messages/handling

vvmk преди 8 години
родител
ревизия
96e01275e3

+ 13
- 0
src/main/java/io/zipcoder/tc_spring_poll_application/error/ErrorDetail.java Целия файл

@@ -1,5 +1,8 @@
1 1
 package io.zipcoder.tc_spring_poll_application.error;
2 2
 
3
+import java.util.List;
4
+import java.util.Map;
5
+
3 6
 /**
4 7
  * project: spring-demo
5 8
  * package: io.zipcoder.tc_spring_poll_application.error
@@ -13,6 +16,16 @@ public class ErrorDetail {
13 16
     long timestamp;
14 17
     String developerMessage;
15 18
 
19
+    public Map<String, List<ValidationError>> getErrors() {
20
+        return errors;
21
+    }
22
+
23
+    public void setErrors(Map<String, List<ValidationError>> errors) {
24
+        this.errors = errors;
25
+    }
26
+
27
+    Map<String, List<ValidationError>> errors;
28
+
16 29
     public String getTitle() {
17 30
         return title;
18 31
     }

+ 0
- 32
src/main/java/io/zipcoder/tc_spring_poll_application/error/RestExceptionHandler.java Целия файл

@@ -1,32 +0,0 @@
1
-package io.zipcoder.tc_spring_poll_application.error;
2
-
3
-import io.zipcoder.tc_spring_poll_application.exception.ResourceNotFoundException;
4
-import org.springframework.http.HttpStatus;
5
-import org.springframework.http.ResponseEntity;
6
-import org.springframework.web.bind.annotation.ControllerAdvice;
7
-import org.springframework.web.bind.annotation.ExceptionHandler;
8
-
9
-import javax.servlet.http.HttpServletRequest;
10
-import java.util.Arrays;
11
-import java.util.Date;
12
-
13
-/**
14
- * project: spring-demo
15
- * package: io.zipcoder.tc_spring_poll_application.error
16
- * author: https://github.com/vvmk
17
- * date: 4/7/18
18
- */
19
-@ControllerAdvice
20
-public class RestExceptionHandler {
21
-    @ExceptionHandler(ResourceNotFoundException.class)
22
-    public ResponseEntity<?> handleResourceNotFoundException(ResourceNotFoundException rnfe,
23
-                                                             HttpServletRequest request) {
24
-        ErrorDetail err = new ErrorDetail();
25
-        err.setTimestamp(new Date().getTime());
26
-        err.setStatus(HttpStatus.NOT_FOUND.value());
27
-        err.setDetail(rnfe.getMessage());
28
-        err.setDeveloperMessage(Arrays.toString(rnfe.getStackTrace()));
29
-        err.setTitle(rnfe.getClass().toString());
30
-        return new ResponseEntity<>(err, HttpStatus.NOT_FOUND);
31
-    }
32
-}

+ 28
- 0
src/main/java/io/zipcoder/tc_spring_poll_application/error/ValidationError.java Целия файл

@@ -0,0 +1,28 @@
1
+package io.zipcoder.tc_spring_poll_application.error;
2
+
3
+/**
4
+ * project: spring-demo
5
+ * package: io.zipcoder.tc_spring_poll_application.error
6
+ * author: https://github.com/vvmk
7
+ * date: 4/7/18
8
+ */
9
+public class ValidationError {
10
+    public String getCode() {
11
+        return code;
12
+    }
13
+
14
+    public void setCode(String code) {
15
+        this.code = code;
16
+    }
17
+
18
+    public String getMessage() {
19
+        return message;
20
+    }
21
+
22
+    public void setMessage(String message) {
23
+        this.message = message;
24
+    }
25
+
26
+    String code;
27
+    String message;
28
+}

+ 67
- 0
src/main/java/io/zipcoder/tc_spring_poll_application/exception/RestExceptionHandler.java Целия файл

@@ -0,0 +1,67 @@
1
+package io.zipcoder.tc_spring_poll_application.exception;
2
+
3
+import io.zipcoder.tc_spring_poll_application.error.ErrorDetail;
4
+import io.zipcoder.tc_spring_poll_application.error.ValidationError;
5
+import io.zipcoder.tc_spring_poll_application.exception.ResourceNotFoundException;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.context.MessageSource;
8
+import org.springframework.http.HttpStatus;
9
+import org.springframework.http.ResponseEntity;
10
+import org.springframework.validation.FieldError;
11
+import org.springframework.web.bind.MethodArgumentNotValidException;
12
+import org.springframework.web.bind.annotation.ControllerAdvice;
13
+import org.springframework.web.bind.annotation.ExceptionHandler;
14
+
15
+import javax.servlet.http.HttpServletRequest;
16
+import java.util.*;
17
+
18
+/**
19
+ * project: spring-demo
20
+ * package: io.zipcoder.tc_spring_poll_application.error
21
+ * author: https://github.com/vvmk
22
+ * date: 4/7/18
23
+ */
24
+@ControllerAdvice
25
+public class RestExceptionHandler {
26
+    private MessageSource messageSource;
27
+
28
+    @Autowired
29
+    public RestExceptionHandler(MessageSource messageSource) {
30
+        this.messageSource = messageSource;
31
+    }
32
+
33
+    @ExceptionHandler(ResourceNotFoundException.class)
34
+    public ResponseEntity<?> handleResourceNotFoundException(ResourceNotFoundException rnfe,
35
+                                                             HttpServletRequest request) {
36
+        ErrorDetail err = new ErrorDetail();
37
+        err.setTimestamp(new Date().getTime());
38
+        err.setStatus(HttpStatus.NOT_FOUND.value());
39
+        err.setDetail(rnfe.getMessage());
40
+        err.setDeveloperMessage(Arrays.toString(rnfe.getStackTrace()));
41
+        err.setTitle(rnfe.getClass().toString());
42
+        return new ResponseEntity<>(err, HttpStatus.NOT_FOUND);
43
+    }
44
+
45
+    @ExceptionHandler(MethodArgumentNotValidException.class)
46
+    public ResponseEntity<?>
47
+    handleValidationError(MethodArgumentNotValidException manve, HttpServletRequest request) {
48
+
49
+        ErrorDetail errorDetail = new ErrorDetail();
50
+
51
+        List<FieldError> fieldErrors =  manve.getBindingResult().getFieldErrors();
52
+        for(FieldError fe : fieldErrors) {
53
+
54
+            List<ValidationError> validationErrorList = errorDetail.getErrors().get(fe.getField());
55
+            if(validationErrorList == null) {
56
+                validationErrorList = new ArrayList<>();
57
+                errorDetail.getErrors().put(fe.getField(), validationErrorList);
58
+            }
59
+            ValidationError validationError = new ValidationError();
60
+            validationError.setCode(fe.getCode());
61
+            validationError.setMessage(messageSource.getMessage(fe, Locale.JAPANESE));
62
+            validationErrorList.add(validationError);
63
+        }
64
+
65
+        return new ResponseEntity<>(errorDetail, HttpStatus.BAD_REQUEST);
66
+    }
67
+}

+ 2
- 0
src/main/resources/messages.properties Целия файл

@@ -0,0 +1,2 @@
1
+NotEmpty.poll.question=Question is a required field
2
+Size.poll.options=Options must be greater than {1} and less than {0}