十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Spring Boot 异常处理
我们提供的服务有:成都做网站、成都网站建设、微信公众号开发、网站优化、网站认证、阎良ssl等。为千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的阎良网站制作公司
异常处理是一种识别并响应错误的一致性机制,异常机制可以把程序中的异常处理代码和正常的业务逻辑代码分离,包装程序的可读性和健壮性。在Spring Boot应用程序中,能够捕获并及时的响应客户端的错误操作是一件非常重要的事情。在本章节中,我将展示如何处理Spring Boot中的异常。
1. 相关注解说明
在进行演示之前,我们先了解一下在Spring Boot应用程序中与异常处理相关的几个注解
| 注解名称 | 说明 |
|---|---|
| @ControllerAdvice | 该标签用于处理全局的异常信息 |
| @ExceptionHadler | 用于处理特定异常信息,并返回相关的响应到客户端 |
首先,我们需要使用**@ControllerAdvice**注解来定义一个全局的异常信息处理类,其语法如下:
package com.ramostear.exception.handler;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
/**
* @author : ramostear
* @date : 2019/3/6 0006-16:33
*/
@ControllerAdvice
public class UserExceptionHandler {
//TODO ...
}接下来,我们需要定义一个扩展了RuntimeException类的自定义异常处理类:
package com.ramostear.exception.handler;
/**
* @author : ramostear
* @date : 2019/3/6 0006-16:31
*/
public class UserNotFoundException extends RuntimeException{
private static final long serialVersionUID = 5534028121297403043L;
}最后,我们使用**@ExceptionHandler**注解来定义一个处理具体异常信息的方法,其语法如下:
@ExceptionHandler(value = UserNotFoundException.class) public ResponseEntity
以上工作准备完成之后,我们可以使用如下的方式来处理API中的异常信息:
@GetMapping("/users/{id}")
public ResponseEntity接下来的内容当中,我将给出完整的示例代码,使用HTTP GET方法请求一个用户信息,当用户存储库中没有相应的用户信息时,返回“user not found”提示信息。
2. 自定义异常信息类 — UserNotFoundException.java
package com.ramostear.exception.handler;
/**
* @author : ramostear
* @date : 2019/3/6 0006-16:31
*/
public class UserNotFoundException extends RuntimeException{
private static final long serialVersionUID = 5534028121297403043L;
}说明:这里只是做了一个简单的扩展
2. 全局异常处理类 —UserExceptionHandler.java
package com.ramostear.exception.handler;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
/**
* @author : ramostear
* @date : 2019/3/6 0006-16:33
*/
@ControllerAdvice
public class UserExceptionHandler {
@ExceptionHandler(value = UserNotFoundException.class)
public ResponseEntity在UserExceptionHandler.java文件中,我们定义了一个处理用户不存在异常的方法,
3. API类 — UserServiceController.java
package com.ramostear.exception.handler.controller;
import com.ramostear.exception.handler.UserNotFoundException;
import com.ramostear.exception.handler.model.User;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
/**
* @author : ramostear
* @date : 2019/3/6 0006-16:26
*/
@RestController
public class UserServiceController {
private static Map userRepo = new HashMap<>();
@PostConstruct
public void initUserRepo(){
User admin = new User ().setId ( 1 ).setName ( "admin" );
userRepo.put ( admin.getId (),admin );
User editor = new User ().setId ( 2 ).setName ( "editor" );
userRepo.put ( editor.getId (),editor );
}
@GetMapping("/users/{id}")
public ResponseEntity 在getUser()方法中,如果用户没有找到,则抛出UserNotFoundException异常。
4. 应用主类 —ExceptionHandlerApplication.java
package com.ramostear.exception.handler;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ExceptionHandlerApplication {
public static void main(String[] args) {
SpringApplication.run(ExceptionHandlerApplication.class, args);
}
}5. 用户POJO类 — User.java
package com.ramostear.exception.handler.model;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @author : ramostear
* @date : 2019/3/6 0006-16:23
*/
@Getter
@Setter
@NoArgsConstructor
public class User {
private long id;
private String name;
public User setId(long id){
this.id = id;
return this;
}
public User setName(String name){
this.name = name;
return this;
}
}6. Maven构建文件 — pom.xml
<?xml version="1.0" encoding="UTF-8"?>4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE com.ramostear exception-handler 0.0.1-SNAPSHOT exception-handler Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.projectlombok lombok org.springframework.boot spring-boot-maven-plugin
8. 运行测试
接下来,我们将打包运行我们的程序,本次教程演示将使用IDEA来运行程序,运行结果如下图所示:

然后,启动Postman应用程序,我们先在地址栏输入:http://localhost:8080/users/1 ,观察正常情况下的测试信息:

Postman的测试结果显示,请求状态为200,且返回了用户的详细信息。现在,我们更新URL为:http://localhost:8080/users/3 ,再次观察测试结果:

此时的HTTP Status为404,且返回了“user not found.”的提示信息。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对创新互联的支持。