JavaWeb博客系统后端-统一异常处理
拉大锯
发表于
2020-02-02 04:29
2805
异常处理
JavaWeb
博客系统
异常
后台
JavaWeb博客系统后端-统一异常处理
经过测试的网站,一般会比较少异常。同常来说,我们在使用已经上线的网站时是比较少发现异常的。
那如果有异常,怎么处理呢?直接告诉用户服务器异常吗?服务器崩溃吗?
当然不是!
而是告诉用户服务器繁忙嘛!
编写一个处理异常的controller
package net.sunofbeaches.controller;
import net.sunofbeaches.response.ResponseResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class ExceptionController {
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseResult handlerException(Exception e) {
e.printStackTrace();
return ResponseResult.FAILED("服务器繁忙");
}
}
如果说抛出了一场,就会走到这里了
接下来我们写一个测试的controller
然后让这个controller里的代码抛出异常
然后看看返回的结果如何
编写测试的controller
package net.sunofbeaches.controller;
import net.sunofbeaches.response.ResponseResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/test")
public class TestController {
@GetMapping()
public ResponseResult testException() {
int a = 10 / 0;
return ResponseResult.SUCCESS();
}
}
这里面我们使用10/0,被除数不可以为0,所以一定会报错的,然后我们测试一下访问这个接口看看是什么结果的呢?
测试
我们访问
localhost:8080/test
看看返回的结果是什么呢?
结果返回的是我们前面定义的异常返回结果
而log里打印了错误信息,因为我们前面输出了呀
okay了,到这里我们就处理了异常!!
但,是不是所有的一场都这么处理呢?
显示不是的,如果说抛出一个用户未登录的一场呢?是不是就返回未登录的结果呢?对吧!
所以还可以对特定的异常进行处理。
处理特定异常
聪明的你,一定想到了前面的注解写的是Excpetion.class
如果说是自定义异常,或者特定的异常,那么修改一下不就可以了吗?
接下来我们看看自己写一个用户未登录的异常康康
自定义一个异常
package net.sunofbeaches.exception;
public class NotLoginException extends Exception {
@Override
public String toString() {
return "not login.";
}
}
修改一个异常处理的controller
package net.sunofbeaches.controller;
import net.sunofbeaches.exception.NotLoginException;
import net.sunofbeaches.response.ResponseResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class ExceptionController {
@ExceptionHandler(NotLoginException.class)
@ResponseBody
public ResponseResult handlerNotLoginException(NotLoginException e) {
e.printStackTrace();
return ResponseResult.FAILED("账号未登录");
}
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseResult handlerException(Exception e) {
e.printStackTrace();
return ResponseResult.FAILED("服务器繁忙");
}
}
添加测试接口
@GetMapping("/notlogin")
public ResponseResult testNotLogin() throws NotLoginException {
throw new NotLoginException();
}
测试账号未登录异常
okay了,到这里我们就把异常统一到个Controller里处理了,在哪里不对,直接抛异常就可以了。
作为一个开发人员,应该要正确地理解“系统繁忙,请稍后重试”