SpringCloud 2 Finchley 系列 三 GlobalException 全局异常处理

SpringBoot 全局异常处理
这块没有什么坑,也比较简单

定义实体类

Exception

定义一个异常类,
俩个成员变量,状态码 跟 错误消息

/**
 * 全局异常
 *
 * @author voidm
 * @date 2019/1/7
 */
public class GlobalException extends Exception {

    private int code;
    private String errorMsg;

    public GlobalException(int code, String errorMsg) {
        this.code = code;
        this.errorMsg = errorMsg;
    }
    // GETTER
    // SETTER
}

ResponseEntity

定义一个标准返回体

public class ApiResult {
    private int code;
    private String msg;
    // GETTER
    // SETTER
}

ExceptionHandler 异常处理

@ControllerAdvice标识扫描拦截Controller中出现的异常
Rest相当于ResponseBody,直接响应个体前端Json数据
@ExceptionHandler.value为捕获的异常类
第一个方法捕获手动抛出的自定义异常
第二个方法为捕获未知异常

/**
 * @author voidm
 * ControllerAdvice注解只拦截Controller不会拦截Interceptor的异常
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(value = GlobalException.class)
    public ApiResult jsonErrorHandler(HttpServletRequest request, GlobalException e) throws Exception {
        ApiResult result = new ApiResult();
        result.setCode(e.getCode());
        result.setMsg(e.getErrorMsg());
        return result;
    }

    @ExceptionHandler(value = Exception.class)
    public ApiResult jsonUnKnowErrorHandler(HttpServletRequest request, GlobalException e) throws Exception {
        ApiResult result = new ApiResult();
        result.setCode(e.getCode());
        result.setMsg(e.getErrorMsg());
        return result;
    }   
}

测试

Api Assert

在接口处,抛出一个条件异常

    @RequestMapping({"/", "hello"})
    @ResponseBody
    public String hello(String name) throws Exception {
        if (StringUtils.isBlank(name)) {
            throw new GlobalException(400,"name is null");
        }
        return "Client Response : Params > name = " + name;
    }

Test (PostMan测试)

voidm

在黑暗中支撑和平的无名者

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐