Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring引导应用程序中处理或抛出异常的最佳实践是什么?_Java_Spring Boot_Exception Handling - Fatal编程技术网

Java 在Spring引导应用程序中处理或抛出异常的最佳实践是什么?

Java 在Spring引导应用程序中处理或抛出异常的最佳实践是什么?,java,spring-boot,exception-handling,Java,Spring Boot,Exception Handling,我已经使用SpringBoot开发了一个RESTAPI。在我的一个服务方法中,我抛出一个ServletException,以防找不到特定的用户。我想知道这是否是最好的方法,我的意思是,这是引发异常的正确层吗?最好的方法之一,或者我所做的是 检查数据/参数是否有效,例如,有时使用if语句手动检查空值。 检查数据/参数的大小,如文件大小 检查数据或参数的有效范围和数据类型,如果不是字符串、长字符、整数等有效类型,则进行类型转换。 如果在系统引发异常之前数据/参数无效,则引发消息并返回该API 我做的

我已经使用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);
  }
}