gpt4 book ai didi

java - Java 函数的不同返回类型

转载 作者:行者123 更新时间:2023-12-01 06:22:22 25 4
gpt4 key购买 nike

我正在将 Spring Boot 与 Data JPA 结合使用。
我有以下代码。

具有名称和信息性消息的用户类。

    class UserResponse{
private String name;
private String message;
}

查找 userBy id 的用户 JPA 存储库;

    interface UserRepository{
Optional<User> findUserById(String id);
}

如果找不到用户,则调用存储库并设置消息的用户服务

    class UserService(){
UserResponse user = new UserResponse();
public UserResponse getUserById(String userId){
Optional<User> useroptional = userRepository.findById(userId);
if(userOptional.isPresent()){
user.setName(userOptional.get().getName());
}else{
user.setMessage("User Not Found");
}
}

UserController 必须根据消息设置正确的 HTTP 状态代码。

 class UserController(){
public ResponseEntity<UserResponse> getUserById(String id){
UserResponse user = userService.getUserById(id);
HttpStatus status = OK;
if(!StringUtils.isEmpty(user.getMessage())){
status = NOT_FOUND;
}
return new ResponseEntity<>(user,status);
}
}

我遇到的问题是为了在 Controller 层设置正确的状态代码,我必须检查用户消息,这是我不喜欢的。无论如何,我们是否可以为成功和失败案例创建控制流程。

说出成功场景的一个返回类型和流程,反之亦然。我知道 Scala 有这个功能,带有 Either 关键字。Java 有替代方案吗?或者我可以用来更好地处理这个问题的任何其他方法......
一种方法是在服务层本身返回 RepsonseEntity 并提供适当的状态代码,但设置状态代码是 Controller 的责任,这就是我的感受。

最佳答案

如果发生故障,您可以抛出自定义Exception并提供适当的消息。然后你可以在@ControllerAdvice中捕获它。我稍后会添加一个示例。

@ControllerAdvice
public class GlobalExceptionHandler {

@ExceptionHandler(MyCustomException.class)
public ResponseEntity<String> exception(MyCustomException e) {

return new ResponseEntity(e.getMessage(), HttpStatus.NotFound);
}
}

在一个@ControllerAdvice中,可以有更多方法监听不同的Exception。自定义异常可以保存您想要的任何内容 - 它是一个普通类 - 因此您可以返回您想要的任何内容的 ResponseEntity

关于java - Java 函数的不同返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45584066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com