Java 在Spring引导应用程序中处理或抛出异常的最佳实践是什么?
我已经使用SpringBoot开发了一个RESTAPI。在我的一个服务方法中,我抛出一个ServletException,以防找不到特定的用户。我想知道这是否是最好的方法,我的意思是,这是引发异常的正确层吗?最好的方法之一,或者我所做的是 检查数据/参数是否有效,例如,有时使用if语句手动检查空值。 检查数据/参数的大小,如文件大小 检查数据或参数的有效范围和数据类型,如果不是字符串、长字符、整数等有效类型,则进行类型转换。 如果在系统引发异常之前数据/参数无效,则引发消息并返回该APIJava 在Spring引导应用程序中处理或抛出异常的最佳实践是什么?,java,spring-boot,exception-handling,Java,Spring Boot,Exception Handling,我已经使用SpringBoot开发了一个RESTAPI。在我的一个服务方法中,我抛出一个ServletException,以防找不到特定的用户。我想知道这是否是最好的方法,我的意思是,这是引发异常的正确层吗?最好的方法之一,或者我所做的是 检查数据/参数是否有效,例如,有时使用if语句手动检查空值。 检查数据/参数的大小,如文件大小 检查数据或参数的有效范围和数据类型,如果不是字符串、长字符、整数等有效类型,则进行类型转换。 如果在系统引发异常之前数据/参数无效,则引发消息并返回该API 我做的
我做的最好的方法之一就是 检查数据/参数是否有效,例如,有时使用if语句手动检查空值。 检查数据/参数的大小,如文件大小 检查数据或参数的有效范围和数据类型,如果不是字符串、长字符、整数等有效类型,则进行类型转换。 如果在系统引发异常之前数据/参数无效,则引发消息并返回该API
我假设您希望捕获应用程序中发生的所有异常。SpringBoot提供了一个全局异常处理程序,可以优雅地捕获所有异常,并根据特定异常返回响应。 它使您能够灵活地相应地更改状态代码、响应数据和标题。实现此功能的几个有用链接是- 一,
二, 我假设您希望捕获应用程序中发生的所有异常。SpringBoot提供了一个全局异常处理程序,可以优雅地捕获所有异常,并根据特定异常返回响应。 它使您能够灵活地相应地更改状态代码、响应数据和标题。实现此功能的几个有用链接是- 一,
二, 在您的@服务中引发异常是可以的。ServletException不是超级有意义的。我建议您创建自己的扩展RuntimeException的异常类并抛出它 所以你会得到这样的结果: 只调用服务方法的控制器最好不要有任何 这里的逻辑 调用DAO类扩展JPARepository的服务类 道: 注意:@ResponseStatus-抛出此异常时将返回HTTP状态代码404 这是开发RESTAPI的一种非常干净和好的方法
请看这里:。我回答了一个问题,提供了您可能会发现有用的信息在@Service中抛出异常是可以的。ServletException不是超级有意义的。我建议您创建自己的扩展RuntimeException的异常类并抛出它 所以你会得到这样的结果: 只调用服务方法的控制器最好不要有任何 这里的逻辑 调用DAO类扩展JPARepository的服务类 道: 注意:@ResponseStatus-抛出此异常时将返回HTTP状态代码404 这是开发RESTAPI的一种非常干净和好的方法
请看这里:。我回答了一个问题,提供了您可能会发现有用的信息创建自定义异常类型比使用ServletException更好。 为了处理异常,可以使用@ControllerAdvice。 首先创建自定义异常类型:
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
假设您的控制器和服务大致如下所示:
@RestController
@RequestMapping("users")
class UserController {
private final UserService userService;
UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
List<String> users() {
return userService.getUsers();
}
}
@Service
class UserService {
List<String> getUsers() {
// ...
throw new UserNotFoundException("User not found");
}
}
创建自定义异常类型比使用ServletException更好。 为了处理异常,可以使用@ControllerAdvice。 首先创建自定义异常类型:
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
假设您的控制器和服务大致如下所示:
@RestController
@RequestMapping("users")
class UserController {
private final UserService userService;
UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
List<String> users() {
return userService.getUsers();
}
}
@Service
class UserService {
List<String> getUsers() {
// ...
throw new UserNotFoundException("User not found");
}
}
不,您应该处理该情况,并且必须返回404错误代码,这意味着找不到。不,您应该处理该情况,并且必须返回404错误代码,这意味着找不到
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(String message) {
super(message);
}
}
@RestController
@RequestMapping("users")
class UserController {
private final UserService userService;
UserController(UserService userService) {
this.userService = userService;
}
@GetMapping
List<String> users() {
return userService.getUsers();
}
}
@Service
class UserService {
List<String> getUsers() {
// ...
throw new UserNotFoundException("User not found");
}
}
@ControllerAdvice
class CustomExceptionHandler {
@ExceptionHandler({UserNotFoundException.class})
public ResponseEntity<Object> handleUserNotFoundException(UserNotFoundException exception) {
return new ResponseEntity<>(exception.getMessage(), HttpStatus.NOT_FOUND);
}
}