SpringBoot是一个非常流行的Java框架,其内置了大量的工具和库,可以大大地提升Java开发的效率。
在实际的应用开发中,异常处理是一个非常重要的问题。使用SpringBoot中的ExceptionHandler可以很方便地处理异常,本文将详细讲解如何实现这个功能。
实现步骤
下面是实现SpringBoot使用ExceptionHandler做异常处理的具体步骤:
1. 在controller层中声明异常处理函数
在controller层中声明一个异常处理函数,并在方法上使用@ExceptionHandler注解,指定该函数处理的异常类型。比如:
@GetMapping("/user/{userId}")
public User getUser(@PathVariable int userId) throws CustomException {
User user = userService.findUserById(userId);
if (user == null) {
throw new CustomException("User not found with id: " + userId);
}
return user;
}
@ExceptionHandler(CustomException.class)
public ResponseEntity<String> handleCustomException(CustomException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
在上面的代码中,getUser函数会根据用户ID查找用户,并在找不到对应用户时抛出CustomException异常。handleCustomException函数使用@ExceptionHandler注解声明,其处理的异常类型也是CustomException。
2. 编写异常类
编写一个自定义的Exception类,该类需要继承Exception或其子类。比如:
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
在这个例子中,我们定义了一个CustomException类,其继承自Exception。该类只有一个构造函数,可以根据传入的message来构造一个异常对象。
3. 测试
使用Postman等工具发送请求,让服务端出现相关的异常,可以验证ExceptionHandler是否被正确调用。
示例
下面是两个示例,分别展示了如何处理两种常见的异常:
处理空指针异常
在controller层中添加如下代码:
@GetMapping("/test/npe")
public String testNPE() {
String s = null;
return s.length();
}
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<String> handleNullPointerException(NullPointerException ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("发生了空指针异常:" + ex.getMessage());
}
当我们访问/test/npe时,会抛出空指针异常。此时,ExceptionHandler会拦截该异常,并返回一个带有错误信息的HTTP响应。
处理文件上传异常
在controller层中添加如下代码:
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
if (file.isEmpty()) {
throw new CustomException("请选择文件!");
}
return "文件上传成功";
}
@ExceptionHandler(CustomException.class)
public ResponseEntity<String> handleCustomException(CustomException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(ex.getMessage());
}
@ExceptionHandler(MaxUploadSizeExceededException.class)
public ResponseEntity<String> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("上传文件太大!");
}
当我们上传过大的文件时,会抛出MaxUploadSizeExceededException异常。ExceptionHandler会拦截该异常,并返回一个带有错误信息的HTTP响应。
总结
使用ExceptionHandler可以很方便地处理Java Web应用中的异常,提高程序的Robustness。本文介绍了使用ExceptionHandler的具体步骤和两个示例,希望能够对读者有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot使用ExceptionHandler做异常处理 - Python技术站