提问者:小点点

在服务中抛出异常时,哪种做法更好?


我正在研究一个spring boot CRUD RESTful API,我正在尝试定义做某些事情的最佳方式,例如:

这是我的列表用户(按其idendpoint服务):

@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);
        }
    }
}

这是另一种写法:

@Service
public class DetailUserService {

    @Autowired
    UserRepository repository;

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

两种方法都有效,但我怎么知道哪种更好呢?


共1个答案

匿名用户

使用Java-8总是更好的选择,可以减少代码,提高代码的可读性。
您可以使用下面的tyle of作为第二种选择。 使用optional.orelseThrow()方法代表了isPresent()-get()对的另一个优雅的替代

您可以在https://dzone.com/articles/using-optional-correction-is-not-optional找到更多信息

@Service
public class DetailUserService {

    @Autowired
    UserRepository repository;

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