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;
}
}