Srpingboot之整理异常抛出

前言
        Springboot的异常处理,我这里总结一种处理Controller异常的方法。虽然遇到过很多个处理异常的方法,但是总觉得,先把自己能掌握住的方法先掌握住哈,以后再慢慢说。

方法

        1、 创建一个专门处理异常的抽象类并在类上加注解@RestControllerAdvice
        2、 创建处理类的方法handlerException(Throwable e)
        3、 在方法上添加@ExceptionHandler
        4、 方法里判断是何类型的异常,根据异常信息处理
        5、 让Controller类继承该类,从而达到每个视图层都能处理异常信息

具体使用如下:
package com.example.demo.controller;

import com.example.demo.entity.json.MessageJson;
import com.example.demo.service.exception.PasswordNotExitException;
import com.example.demo.service.exception.RegisterFaildException;
import com.example.demo.service.exception.UserNotFoundException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public abstract class BaseController {
	//请求成功返回给客户端的code
    public static final int SUCCESS=200;

    @ExceptionHandler
    public MessageJson handlerException(Throwable e){
    	//MessageJson是返回给客户端的一个JSON对象,其实是一个普普通通的类
        MessageJson messageJson=new MessageJson(e);
		//判断e的类型
        if(e instanceof PasswordNotExitException){
            messageJson.setCode(4001);//4001代表密码不对
        }else if(e instanceof UserNotFoundException){
            messageJson.setCode(4002);//4002代表用户不存在
        }else if(e instanceof RegisterFaildException){
            messageJson.setCode(4003);//4003代表添加用户失败
        }
		//返回JSON对象
        return messageJson;
    }

}
自定义异常

        1、创建个异常包
        2、创建自定义类
        3、继承RuntimeException
        4、重写方法

package com.example.demo.service.exception;

public class UserNotFoundException extends RuntimeException{
    public UserNotFoundException() {
        super();
    }

    public UserNotFoundException(String message) {
        super(message);
    }

    public UserNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }

    public UserNotFoundException(Throwable cause) {
        super(cause);
    }

    protected UserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

修改JSON对象

        修改JSON的构造器,以便传输错误信息,具体方法如下:

package com.example.demo.entity.json;

public class MessageJson {
	
    private Integer code;//响应代码
    private Object object;//返回给客户端的对象
    private String message;//错误信息

    public MessageJson() {
    }

    public MessageJson(Throwable e){//需要修改这一步,目的是为了给message赋值,主要是在处理异常时,将异常传给JSON
        this.message=e.getMessage();
    }

    public MessageJson(Integer code, Object object) {
        this.code = code;
        this.object = object;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Object getObject() {
        return object;
    }

    public void setObject(Object object) {
        this.object = object;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {

        this.message = message;
    }
}

流程说明

        具体的流程大概如下:客户端发送请求到后台,controller中调用service方法,经过逻辑判断,如果发现有自定义异常抛出,那就会直接跳到异常处理方法handlerException中,然后创建JSON对象,将异常信息传给JSON的message属性,组后返回给前台,然后前台再根据返回的message和code来判断是什么异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值