JavaWeb博客系统后端-统一异常处理
JavaWeb博客系统后端-统一异常处理 1223561824851546112 1153952789488054272
2

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里处理了,在哪里不对,直接抛异常就可以了。

作为一个开发人员,应该要正确地理解“系统繁忙,请稍后重试”

1153952789488054272
如果你喜欢作者的文章,欢迎打赏鼓励
1223561824851546112
评论
发表评论
  • 断点-含光君
    每一种异常都要写一个class吗
    2020-02-14 22:19  回复
    1139423796017500160
    • 拉大锯  回复 @断点-含光君
      大公司严格的会写,他们一个人负责一个接口的。高德他们几百号人,一个人负责几个接口,有些只负责一个接口,哈哈。一看异常名称就知道什么异常了,加上附加信息就知道什么原因了。一般比较详细,方便收集。
      拉大锯 2020-02-14 22:50   回复 1153952789488054272
    • 断点-含光君  回复 @拉大锯
      没做过后端,所以感到好奇。哈哈
      断点-含光君 2020-02-16 20:46   回复 1139423796017500160
  • {{item.publishtime|formatDate}}  回复
    {{item.userid}}
    •  回复
      {{item.publishtime|formatDate}}   回复
1223561824851546112 1153952789488054272
欢迎关注作者微信公众号
{{subscriptionQrc.subname}}
推荐文章