Browse Source

优化异常处理

周浩 9 years ago
parent
commit
f09d9b3db7

+ 18 - 65
hsweb-web-controller/src/main/java/org/hsweb/web/controller/ControllerExceptionTranslator.java

@@ -1,80 +1,33 @@
 package org.hsweb.web.controller;
 
-import com.alibaba.fastjson.JSON;
-import org.hsweb.web.core.exception.*;
+import org.hsweb.web.core.exception.BusinessException;
 import org.hsweb.web.core.message.ResponseMessage;
-import org.springframework.http.HttpStatus;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletResponse;
 
-@ControllerAdvice
+@ControllerAdvice(annotations = Controller.class)
+@Order(10)
 public class ControllerExceptionTranslator {
-
-    @ExceptionHandler(ValidationException.class)
-    @ResponseStatus(HttpStatus.BAD_REQUEST)
-    @ResponseBody
-    ResponseMessage handleException(ValidationException exception) {
-        return ResponseMessage.error(exception.getMessage(), 400);
-    }
-
-    @ExceptionHandler(org.hsweb.ezorm.exception.ValidationException.class)
-    @ResponseStatus(HttpStatus.BAD_REQUEST)
-    @ResponseBody
-    ResponseMessage handleException(org.hsweb.ezorm.exception.ValidationException exception) {
-        return ResponseMessage.error(JSON.toJSONString(exception.getValidateResult()), 400);
-    }
-
-
     @ExceptionHandler(BusinessException.class)
-    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
-    @ResponseBody
-    ResponseMessage handleException(BusinessException exception) {
-        return ResponseMessage.error(exception.getMessage(), exception.getStatus());
+    ModelAndView handleExceptionView(BusinessException exception, HttpServletResponse response) {
+        response.setStatus(exception.getStatus());
+        ModelAndView modelAndView = new ModelAndView("error/" + exception.getStatus());
+        modelAndView.addAllObjects(ResponseMessage.error(exception.getMessage(), exception.getStatus()).toMap());
+        modelAndView.addObject("exception", exception);
+        return modelAndView;
     }
 
-
-    @ExceptionHandler(AuthorizeException.class)
-    @ResponseStatus(HttpStatus.UNAUTHORIZED)
-    @ResponseBody
-    ResponseMessage handleException(AuthorizeException exception) {
-        return ResponseMessage.error(exception.getMessage(), exception.getStatus());
+    @ExceptionHandler(Throwable.class)
+    ModelAndView handleExceptionView(Throwable exception, HttpServletResponse response) {
+        response.setStatus(500);
+        ModelAndView modelAndView = new ModelAndView("error/" + 500);
+        modelAndView.addAllObjects(ResponseMessage.error(exception.getMessage(), 500).toMap());
+        modelAndView.addObject("exception", exception);
+        return modelAndView;
     }
-
-    @ExceptionHandler(AuthorizeForbiddenException.class)
-    @ResponseStatus(HttpStatus.FORBIDDEN)
-    @ResponseBody
-    ResponseMessage handleException(AuthorizeForbiddenException exception) {
-        return ResponseMessage.error(exception.getMessage(), exception.getStatus());
-    }
-
-
-    @ExceptionHandler(NotFoundException.class)
-    @ResponseStatus(HttpStatus.NOT_FOUND)
-    @ResponseBody
-    ResponseMessage handleException(NotFoundException exception) {
-        return ResponseMessage.error(exception.getMessage(), 404);
-    }
-
-//    @ExceptionHandler(BusinessException.class)
-//    ModelAndView handleExceptionView(BusinessException exception, HttpServletResponse response) {
-//        response.setStatus(exception.getStatus());
-//        ModelAndView modelAndView = new ModelAndView("error/" + exception.getStatus());
-//        modelAndView.addAllObjects(ResponseMessage.error(exception.getMessage(), exception.getStatus()).toMap());
-//        modelAndView.addObject("exception", exception);
-//        return modelAndView;
-//    }
-//
-//    @ExceptionHandler(Throwable.class)
-//    ModelAndView handleExceptionView(Throwable exception, HttpServletResponse response) {
-//        response.setStatus(500);
-//        ModelAndView modelAndView = new ModelAndView("error/" + 500);
-//        modelAndView.addAllObjects(ResponseMessage.error(exception.getMessage(), 500).toMap());
-//        modelAndView.addObject("exception", exception);
-//        return modelAndView;
-//    }
 }

+ 60 - 0
hsweb-web-controller/src/main/java/org/hsweb/web/controller/RestControllerExceptionTranslator.java

@@ -0,0 +1,60 @@
+package org.hsweb.web.controller;
+
+import com.alibaba.fastjson.JSON;
+import org.hsweb.web.core.exception.*;
+import org.hsweb.web.core.message.ResponseMessage;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+@ControllerAdvice(annotations = RestController.class)
+@Order(1)
+public class RestControllerExceptionTranslator {
+
+    @ExceptionHandler(ValidationException.class)
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    @ResponseBody
+    ResponseMessage handleException(ValidationException exception) {
+        return ResponseMessage.error(exception.getMessage(), 400);
+    }
+
+    @ExceptionHandler(org.hsweb.ezorm.exception.ValidationException.class)
+    @ResponseStatus(HttpStatus.BAD_REQUEST)
+    @ResponseBody
+    ResponseMessage handleException(org.hsweb.ezorm.exception.ValidationException exception) {
+        return ResponseMessage.error(JSON.toJSONString(exception.getValidateResult()), 400);
+    }
+
+
+    @ExceptionHandler(BusinessException.class)
+    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
+    @ResponseBody
+    ResponseMessage handleException(BusinessException exception) {
+        return ResponseMessage.error(exception.getMessage(), exception.getStatus());
+    }
+
+
+    @ExceptionHandler(AuthorizeException.class)
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+    @ResponseBody
+    ResponseMessage handleException(AuthorizeException exception) {
+        return ResponseMessage.error(exception.getMessage(), exception.getStatus());
+    }
+
+    @ExceptionHandler(AuthorizeForbiddenException.class)
+    @ResponseStatus(HttpStatus.FORBIDDEN)
+    @ResponseBody
+    ResponseMessage handleException(AuthorizeForbiddenException exception) {
+        return ResponseMessage.error(exception.getMessage(), exception.getStatus());
+    }
+
+
+    @ExceptionHandler(NotFoundException.class)
+    @ResponseStatus(HttpStatus.NOT_FOUND)
+    @ResponseBody
+    ResponseMessage handleException(NotFoundException exception) {
+        return ResponseMessage.error(exception.getMessage(), 404);
+    }
+
+}