到目前为止,我们都没有对异常情况进行统一处理,如果发生异常,接口暴露的只是简略的信息。

比如,我们可以制造一个异常场景。

  @ApiOperation("查找教师")
    @GetMapping("/findTeacher/{id}")
    public R findTeacher(@PathVariable String id) {
        EduTeacher eduTeacher = eduTeacherService.getById(id);
        int i = 5/0;
        return R.ok().data("item", eduTeacher);
    }

自行findTeacher的请求,responseBody信息如下。

alt 下面我们统一对异常信息进行处理。在common的servicebase包下新建包exceptionhandler,包下新建类。

@ControllerAdvice
public class GlobalExceptionHandler {
    // 指定全部Expection类型异常执行handler
    @ExceptionHandler(Exception.class)
    @ResponseBody //返回数据
    public R error(){
        return R.error().message("执行全局统一异常处理...");
    }
}

上述代码要使用common_utils模块中的R。因此先在servicebase中引入依赖再导包。

<dependency>
    <groupId>com.wangzhou</groupId>
    <artifactId>common_utils</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

由于依赖传递,如下图,故可以移除原来service-edu中对于common_utils的依赖,避免重复引入。

alt

测试结果如下。

alt