欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

SpringBoot 统一异常处理详解

时间:2021-06-14 09:42:58|栏目:JAVA代码|点击:

代码结构

配置pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>bsea</groupId>
 <artifactId>SpringBootException</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.5.14.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
</project>

启动类

package com.zz;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
 public static void main(String[] args) {
  SpringApplication.run(App.class,args);
 }
}

自定义异常类

package com.zz.exception;

public class UserNotExistException extends RuntimeException{
 private static final long serialVersionUID = -1574716826948451793L;

 private String id;

 public UserNotExistException(String id){
  super("user not exist");
  this.id = id;
 }

 public String getId() {
  return id;
 }

 public void setId(String id) {
  this.id = id;
 }
}

统一处理类

1. 在class上面加 @ControllerAdvice 表示全局异常处理类

2. 在方法的上面加@ExceptionHandler(UserNotExistException.class), 表示catch 到这个异常类型,并且在方法中处理, 不同的异常,可以通过不同的方法处理,每个方法上面都是通过这个注解括号里面的异常类来设置需要处理的异常类型。

package com.zz.handler;

import com.zz.exception.UserNotExistException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class ControllerExceptionHandler {
 //返回json的错误信息
 @ExceptionHandler(UserNotExistException.class)
 @ResponseBody
 @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
 public Map<String, Object> handleUserNotExistsException(UserNotExistException e) {
  Map<String, Object> map = new HashMap<>();
  map.put("id", e.getId());
  map.put("message", e.getMessage());
  return map;
 }
 //错误以后,跳转到自己定义的错误页面
 @ExceptionHandler(ArithmeticException.class)
 public String handle1(ArithmeticException e) {
  System.out.println("handle1 500*到了**************");
  return "/500.html";
 }
}

controller类

package com.zz.controller;

import com.zz.exception.UserNotExistException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("user")
public class UserController {

 @GetMapping("/{id:\\d+}")
 public void get(@PathVariable String id) {

  throw new UserNotExistException(id);
 }
 @GetMapping("error2")
 public void get2() {
  int a=1/0;
 }
}

#运行结果

代码地址 github: 添加链接描述

上一篇:详解JDK中ExecutorService与Callable和Future对线程的支持

栏    目:JAVA代码

下一篇:Spring中bean的初始化和销毁几种实现方式详解

本文标题:SpringBoot 统一异常处理详解

本文地址:http://www.codeinn.net/misctech/141442.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有