Переглянути джерело

增加ConstraintViolationException处理

zhouhao 6 роки тому
батько
коміт
be2907670c

+ 20 - 5
hsweb-starter/hsweb-spring-boot-starter/src/main/java/org/hswebframework/web/starter/RestControllerExceptionTranslator.java

@@ -41,6 +41,8 @@ import org.springframework.web.servlet.NoHandlerFoundException;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
 import java.sql.SQLException;
 import java.util.List;
 
@@ -97,6 +99,20 @@ public class RestControllerExceptionTranslator {
         return ResponseMessage.error(404, exception.getMessage());
     }
 
+    @ExceptionHandler(ConstraintViolationException.class)
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    ResponseMessage handleConstraintViolationException(ConstraintViolationException e) {
+        SimpleValidateResults results = new SimpleValidateResults();
+        for (ConstraintViolation<?> violation : e.getConstraintViolations()) {
+            results.addResult(violation.getPropertyPath().toString(), violation.getMessage());
+        }
+        List<ValidateResults.Result> errorResults = results.getResults();
+
+        return ResponseMessage
+                .error(400, errorResults.isEmpty() ? "" : errorResults.get(0).getMessage())
+                .result(errorResults);
+    }
+
     @ExceptionHandler(MethodArgumentNotValidException.class)
     @ResponseStatus(HttpStatus.BAD_REQUEST)
     ResponseMessage handleException(MethodArgumentNotValidException e) {
@@ -152,11 +168,11 @@ public class RestControllerExceptionTranslator {
     /**
      * 404异常,Spring MVC DispatcherServlet 当没找到 Handler处理请求时,
      * 如果配置了 throwExceptionIfNoHandlerFound 为 true时,会抛出此异常
-     *
+     * <p>
      * 在配置文件中使用:
-     *  spring:
-     *       mvc:
-     *         throw-exception-if-no-handler-found: true
+     * spring:
+     * mvc:
+     * throw-exception-if-no-handler-found: true
      *
      * @see org.springframework.web.servlet.DispatcherServlet#noHandlerFound(HttpServletRequest, HttpServletResponse)
      */
@@ -189,5 +205,4 @@ public class RestControllerExceptionTranslator {
     }
 
 
-
 }