+ * 要继承 RuntimeException + *
+ * + * @package: com.xkcoding.springbootdemoexceptionhandler.exception + * @description: 统一的 json 异常处理 + * @author: yangkai.shen + * @date: Created in 2017/11/24 下午1:32 + * @copyright: Copyright (c) 2017 + * @version: 0.0.1 + * @modified: yangkai.shen + */ +@Getter +public class DemoJsonException extends RuntimeException { + public Integer code; + + public DemoJsonException(Integer code, String message) { + super(message); + this.code = code; + } +} diff --git a/spring-boot-demo-exceptionhandler/src/main/java/com/xkcoding/springbootdemoexceptionhandler/exception/DemoPageException.java b/spring-boot-demo-exceptionhandler/src/main/java/com/xkcoding/springbootdemoexceptionhandler/exception/DemoPageException.java new file mode 100644 index 0000000..3e5d053 --- /dev/null +++ b/spring-boot-demo-exceptionhandler/src/main/java/com/xkcoding/springbootdemoexceptionhandler/exception/DemoPageException.java @@ -0,0 +1,27 @@ +package com.xkcoding.springbootdemoexceptionhandler.exception; + +import lombok.Getter; + +/** + * 统一的页面异常处理 + *+ * 要继承 RuntimeException + *
+ * + * @package: com.xkcoding.springbootdemoexceptionhandler.exception + * @description: 统一的页面异常处理 + * @author: yangkai.shen + * @date: Created in 2017/11/24 下午1:32 + * @copyright: Copyright (c) 2017 + * @version: 0.0.1 + * @modified: yangkai.shen + */ +@Getter +public class DemoPageException extends RuntimeException { + public Integer code; + + public DemoPageException(Integer code, String message) { + super(message); + this.code = code; + } +} diff --git a/spring-boot-demo-exceptionhandler/src/main/java/com/xkcoding/springbootdemoexceptionhandler/handler/DemoExceptionHandler.java b/spring-boot-demo-exceptionhandler/src/main/java/com/xkcoding/springbootdemoexceptionhandler/handler/DemoExceptionHandler.java new file mode 100644 index 0000000..62a3824 --- /dev/null +++ b/spring-boot-demo-exceptionhandler/src/main/java/com/xkcoding/springbootdemoexceptionhandler/handler/DemoExceptionHandler.java @@ -0,0 +1,55 @@ +package com.xkcoding.springbootdemoexceptionhandler.handler; + +import com.xkcoding.springbootdemoexceptionhandler.domain.R; +import com.xkcoding.springbootdemoexceptionhandler.exception.DemoJsonException; +import com.xkcoding.springbootdemoexceptionhandler.exception.DemoPageException; +import lombok.extern.slf4j.Slf4j; +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.servlet.ModelAndView; + +/** + * 自定义异常统一处理 + * + * @package: com.xkcoding.springbootdemoexceptionhandler.handler + * @description: 自定义异常统一处理 + * @author: yangkai.shen + * @date: Created in 2017/11/24 下午1:37 + * @copyright: Copyright (c) 2017 + * @version: 0.0.1 + * @modified: yangkai.shen + */ +@ControllerAdvice +@Slf4j +public class DemoExceptionHandler { + public static final String DEFAULT_ERROR_VIEW = "error"; + + /** + * 统一 json 异常处理 + * + * @param exception DemoJsonException + * @return 统一返回 json 格式 + */ + @ExceptionHandler(value = DemoJsonException.class) + @ResponseBody + public R jsonErrorHandler(DemoJsonException exception) { + log.error("【DemoJsonException】:{}", exception.getMessage()); + return R.error(exception); + } + + /** + * 统一 页面 异常处理 + * + * @param exception DemoPageException + * @return 统一跳转到异常页面 + */ + @ExceptionHandler(value = DemoPageException.class) + public ModelAndView pageErrorHandler(DemoPageException exception) { + log.error("【DemoPageException】:{}", exception.getMessage()); + ModelAndView view = new ModelAndView(); + view.addObject("message", exception.getMessage()); + view.setViewName(DEFAULT_ERROR_VIEW); + return view; + } +} diff --git a/spring-boot-demo-exceptionhandler/src/main/resources/application.yml b/spring-boot-demo-exceptionhandler/src/main/resources/application.yml new file mode 100644 index 0000000..9b72a64 --- /dev/null +++ b/spring-boot-demo-exceptionhandler/src/main/resources/application.yml @@ -0,0 +1,9 @@ +server: + port: 8080 + context-path: /demo +spring: + thymeleaf: + mode: HTML5 + encoding: UTF-8 + content-type: text/html + cache: false \ No newline at end of file diff --git a/spring-boot-demo-exceptionhandler/src/main/resources/templates/error.html b/spring-boot-demo-exceptionhandler/src/main/resources/templates/error.html new file mode 100644 index 0000000..0b8c802 --- /dev/null +++ b/spring-boot-demo-exceptionhandler/src/main/resources/templates/error.html @@ -0,0 +1,11 @@ + + + + +