Spring Boot异常处理
SpringBoot 中对于异常处理提供了五种处理方式
自定义错误页面
SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会像/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicExceptionController 来处理/error 请求,然后跳转到默认显示异常的页面来展示异常信息。
如果我们需要将所有的异常同一跳转到自定义的错误页面,要再src/main/resources/templates 目录下创建 error.html 页面。
注意:名称必须叫 error

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<h1>页面崩溃了呢,主人~~~~</h1>
</body>
</html>
@ExceptionHandle 注解处理异常
Controller
package com.bjsxt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class SpringController {
@RequestMapping("/show")
public String showInFo(){
String str=null;
str.length();
return "index";
}
@RequestMapping("/show2")
public String show(){
int a=10/0;
return "index";
}
/**
* java.lang.ArithmeticException
* 该方法需要返回一个ModelAndView:目的是可以让我们封装异常信息以及视图的指定
* 参数Exception e:会将产生异常对象注入到方法中
*/
@ExceptionHandler(value={java.lang.ArithmeticException.class})
public ModelAndView arithmeticExceptionHandler(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.toString());
mv.setViewName("error1");
return mv;
}
/**
* java.lang.NullPointerException
* 该方法需要返回一个ModelAndView:目的是可以让我们封装异常信息以及视图的指定
* 参数Exception e:会将产生异常对象注入到方法中
*/
@ExceptionHandler(value = {java.lang.NullPointerException.class})
public ModelAndView nullPointerExceptionHandler(Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.toString());
mv.setViewName("error2");
return mv;
}
}
前端页面
error1
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<h1>页面崩溃了呢,主人~~~~</h1>
<span th:text="${error}"></span>
<h1>空指针异常!!!!</h1>
</body>
</html>
error2
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>error</title>
</head>
<body>
<h1>页面崩溃了呢,主人~~~~</h1>
<span th:text="${error}"></span>
<h1>其他异常!!!!</h1>
</body>
</html>
@ControllerAdvice+@ExceptionHandler 注解处理异常
需要创建一个能够处理异常的全局异常类。在该类上需要添加@ControllerAdvice 注解
GolableException.java
package com.bjsxt.exception;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Properties;
@ControllerAdvice
public class GolableException implements HandlerExceptionResolver {
/**
* java.lang.ArithmeticException
* 该方法需要返回一个ModelAndView:目的是可以让我们封装异常信息以及视图的指定
* 参数Exception e:会将产生异常对象注入到方法中
*/
@ExceptionHandler(value={java.lang.ArithmeticException.class})
public ModelAndView arithmeticExceptionHandler(Exception e){
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.toString());
mv.setViewName("error1");
return mv;
}
/**
* java.lang.NullPointerException
* 该方法需要返回一个ModelAndView:目的是可以让我们封装异常信息以及视图的指定
* 参数Exception e:会将产生异常对象注入到方法中
*/
@ExceptionHandler(value = {java.lang.NullPointerException.class})
public ModelAndView nullPointerExceptionHandler(Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("error", e.toString());
mv.setViewName("error2");
return mv;
}
}
配置 SimpleMappingExceptionResolver 处理异常
在全局异常类中添加一个方法完成异常的同一处理
GolableException.java
package com.bjsxt.exception;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Properties;
@Configuration
public class GolableException implements HandlerExceptionResolver {
@Bean
public SimpleMappingExceptionResolver geyErrorHtml(){
SimpleMappingExceptionResolver resolver=new SimpleMappingExceptionResolver();
Properties proper = new Properties();
proper.put("java.lang.NullPointerException","error1");
proper.put("java.lang.ArithmeticException","error2");
resolver.setExceptionMappings(proper);
return resolver;
}
}
自定义 HandlerExceptionResolver 类处理异常
需要再全局异常处理类中实现HandlerExceptionResolver接口
GolableException.java
package com.bjsxt.exception;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Properties;
@Configuration
public class GolableException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mav=new ModelAndView();
if (e instanceof ArithmeticException){
mav.setViewName("error2");
}
if (e instanceof NullPointerException){
mav.setViewName("error1");
}
mav.addObject("error",e.toString());
return mav;
}
}

浙公网安备 33010602011771号