Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/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 在服务中引发异常时,哪种做法更好?_Java_Spring_Api_Rest - Fatal编程技术网

Java 在服务中引发异常时,哪种做法更好?

Java 在服务中引发异常时,哪种做法更好?,java,spring,api,rest,Java,Spring,Api,Rest,我正在开发一个Spring Boot CRUD RESTful API,并试图定义做某些事情的最佳方式,例如: 这是我的id端点服务列表用户: @Service public class DetailUserService { @Autowired UserRepository repository; public Optional<User> listUser(Long id) { Optional<User> user =

我正在开发一个Spring Boot CRUD RESTful API,并试图定义做某些事情的最佳方式,例如:

这是我的id端点服务列表用户:

@Service
public class DetailUserService {

    @Autowired
    UserRepository repository;

    public Optional<User> listUser(Long id) {

        Optional<User> user = repository.findById(id);
        if (!user.isPresent()) {
            throw new UserNotFoundException(id);
        } else {
            return repository.findById(id);
        }
    }
}

这两种方法都有效,但我如何知道哪一种更好?

使用
java-8
对于更少的代码和更可读的代码来说总是更好的选择。
您可以使用下面提到的样式作为第二个选项。 使用
Optional.orelsetrow()
方法代表了
isPresent()-get()
对的另一种优雅的替代方法

你可以在这里找到更多


在第一个代码段中,您将查询存储库两次。这使得这两种情况更糟。对于这两个代码段,返回404notfound也是一个很好的设计
@Service
public class DetailUserService {

    @Autowired
    UserRepository repository;

    public User listUser(Long id) {
        return repository.findById(id)
                .orElseThrow(() -> new UserNotFoundException(id));
    }
}
@Service
public class DetailUserService {

    @Autowired
    UserRepository repository;

    public User listUser(Long id) {
        return repository.findById(id)
                .orElseThrow(() -> new UserNotFoundException(id));
    }
}