SpringBoot 统一异常处理--- @ControllerAdvice 使用
2017-12-02 16:11
1391 查看
参考慕课网地址: Aop之统一异常处理 http://www.imooc.com/learn/810
在实际项目中经常会抛出各种各样的异常,有时候需要对异常信息进行统一处理,以友好正确的形式返回给调用方.
使用Spring MVC的@ControllerAdvice 注解就可以捕获全局异常.
比如我们有一个Controller,接收一个String类型的 username 作为参数,当username=root时,返回成功信息,否则返回错误信息
注意: MyException 就是我们的自定义异常,在程序出现错误时都可以 手动抛出此异常,并使用一个枚举类 MyResultEnum,来封装错误信息,当程序抛出此异常后,就会进入异常处理
然后我们就可以全局捕获 这个异常信息,并把异常所携带信息以适当是形式展现给调用方.
自定义全局异常处理类 GlobalExceptionHandler.java
只需要使用 @ControllerAdvice 注解来标识即可,可以结合 @Controller 注解来理解.
@Controller 注解标识的类 拦截所有的web请求,使用 @RequestMappering() 进行匹配
@ControllerAdvice 注解标识的类 拦截程序抛出的异常,使用@ExceptionHandler() 进行匹配
顺便把枚举类 MyResultEnum 的代码也贴出来
返回:
浏览器访问 localhost/sell/test1/java
返回:
SpringBoot 统一异常处理— @ControllerAdvice 使用
使用Spring MVC的@ControllerAdvice注解做Json的异常处理在实际项目中经常会抛出各种各样的异常,有时候需要对异常信息进行统一处理,以友好正确的形式返回给调用方.
使用Spring MVC的@ControllerAdvice 注解就可以捕获全局异常.
比如我们有一个Controller,接收一个String类型的 username 作为参数,当username=root时,返回成功信息,否则返回错误信息
@RestController @Slf4j public class Test1Controller { @RequestMapping("/test1/{username}") public Result test2(@PathVariable(value = "username") String username){ log.info("username={}",username); if(!"root".equals(username)){ throw new MyException(MyResultEnum.FAIL); } return new Result(MyResultEnum.SUCCESS); } }
注意: MyException 就是我们的自定义异常,在程序出现错误时都可以 手动抛出此异常,并使用一个枚举类 MyResultEnum,来封装错误信息,当程序抛出此异常后,就会进入异常处理
然后我们就可以全局捕获 这个异常信息,并把异常所携带信息以适当是形式展现给调用方.
自定义全局异常处理类 GlobalExceptionHandler.java
/** * @author itguang * @create 2017-12-02 15:34 **/ @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MyException.class) @ResponseBody public Result handleMyException(HttpServletRequest request, MyException e){ String message = e.getMessage(); Integer code = e.getCode(); Result result = new Result(code,message); return result; } }
只需要使用 @ControllerAdvice 注解来标识即可,可以结合 @Controller 注解来理解.
@Controller 注解标识的类 拦截所有的web请求,使用 @RequestMappering() 进行匹配
@ControllerAdvice 注解标识的类 拦截程序抛出的异常,使用@ExceptionHandler() 进行匹配
顺便把枚举类 MyResultEnum 的代码也贴出来
@Getter public enum MyResultEnum { SUCCESS(0,"成功"), FAIL(1,"失败"), ; private Integer code; private String msg; MyResultEnum(Integer code, String msg) { this.code = code; this.msg = msg; } }
测试
浏览器访问 localhost/sell/test1/root返回:
{ "code": 0, "msg": "成功", "data": null }
浏览器访问 localhost/sell/test1/java
返回:
{ "code": 1, "msg": "失败", "data": null }
相关文章推荐
- springboot集中处理controller层的异常(有关@ControllerAdvice的用法)
- Spring中的@ControllerAdvice注解配合@ExceptionHandler使用实现异常处理
- Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
- @controllerAdvice 统一处理异常(spring-mvc)
- Springboot使用了ResponseBodyAdvice处理返回值异常?
- SpringBoot进阶之使用异常替代返回错误码(拦截异常并统一处理)
- Spring Boot @ControllerAdvice 处理全局异常,返回固定格式Json
- Spring Boot中使用AOP统一处理web层异常的方法
- Spring中@ControllerAdvice注解配合@ExceptionHandler实现统一异常处理
- Spring Boot中Web应用的统一异常处理
- ajax和普通请求使用spring mvc在controller中的异常统一处理
- 使用Spring实现异常统一处理【一】
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot中使用AOP统一处理Web请求日志
- spring-boot使用AOP统一处理日志
- spring-boot使用AOP统一处理日志
- Spring.Net AOP 学习之旅: 使用 Throws Advice 处理异常
- 使用Spring MVC的@ControllerAdvice注解做Json的异常处理