Spring 入门八 MVC注解入门程序的编写②注解形式处理异常

SpringMVC异常的处理

SpringMVC异常处理

在我们项目的开发中,编写我们的代码,或是处理数据库登操作的过程中,或是我们MVC设计模式中的各层都会出现BUG,异常,这时候我们肯定要对我们的异常进行处理,每次处理工作量都非常的大,所有我们可以将异常处理统一提出来解耦。

Spring MVC处理异常有3种方式:

(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;

(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;

(3)使用@ExceptionHandler注解实现异常处理;


一切都是基于我们的Spring,这里我们使用的是注解的方式来处理异常

处理异常的方式

注意:这里是我采取的方式,并不是唯一性的
①在controller层将异常抛出
②异常信息所需要的变量存储在我们的bean类中。
③使用枚举类将变量存储到我们的bean类中。这样可以提高我们程序的维护性跟可读性
④新建一个专门处理异常的Contorller来处理异常,将我们抛出的异常交给这个Contorller来处理,使用注解来捕获异常


文件目录结构

在这里插入图片描述


Controller层抛出异常

这里我们新建一个专们存放Contorller层的文件夹,新建第一个firstController类:

使用注解来标注这是个Controller,换个说法就是将这个类加入我们的容器中,并且给我们的方法映射一个路径,这个路径是用来处理我们前端传过来的数据,可以认为是我们之前学过的servlet

//加入SpringMVC容器中
@Controller
public class FirstController {
//设置映射的路径
    @GetMapping("err")
    public void error(){

        try {
            int i = 10/0;
        } catch (Exception e) {
            throw new MyException(UserMessageEnum.BYZERO);
        }

    }
}



bean类

这里我在这个错误信息处理bean类只设置了三个bean量:code message time。其中我们的time是自动的,在出现错误时,自动将当前系统时间赋值代码如下:

package com.shangma.cn.entity;

/**
 * @program:
 * @description: 错误处理需要的bean存数据
 * @author:
 * @create: 2019/8/2110:29
 **/
public class ExceptionResponseBean {

    private String message;
    private Integer code;
    private Long time;




    public ExceptionResponseBean(String message, Integer code) {
        this.message = message;
        this.code = code;
        这里将当前系统时间给到我们的time
        this.time = System.currentTimeMillis();
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Integer getCode() {
        return code;
    }

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

    public Long getTime() {
        return time;
    }

    public void setTime(Long time) {
        this.time = time;
    }

    @Override
    public String toString() {
        return "ExceptionResponseBean{" +
                "message='" + message + '\'' +
                ", code=" + code +
                ", time=" + time +
                '}';
    }
}


枚举类

这个是枚举是将bean中变量所需要的数据传参,目前就设置了一个BYZERO:


package com.shangma.cn.UserEnum;


public enum UserMessageEnum {
    BYZERO(2000,"除数错误"),;

    private int code;
    private String message;

    UserMessageEnum(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

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

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}



处理错误Controller

使用注解来捕获@ControllerAdvice我们项目中的所有错误,并且在我们这个Controller类中的某个方法返回的是一个JSON数据。

package com.shangma.cn.exception;

import com.shangma.cn.UserEnum.UserMessageEnum;
import com.shangma.cn.entity.ExceptionResponseBean;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


@ControllerAdvice
public class MyExceptionHandler {

    @ResponseBody
    @ExceptionHandler(MyException.class)
    public ExceptionResponseBean exceptionResponseBean(MyException e){
        UserMessageEnum userMessageEnum = e.getUserMessageEnum();
        ExceptionResponseBean exceptionResponseBean = new 
        //将我们的枚举加入到我们的bean中,返回的数据也是这个bean
        ExceptionResponseBean(userMessageEnum.getMessage(),userMessageEnum.getCode());
        return  exceptionResponseBean;
    }

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值