当找不到用户时,Spring @Service 应该返回什么?

What should be returned from Spring @Service when User was not found?

正如标题所说,我有一些像这样的存储库:

public UserRepository{
    public Optional<User> findByUsername(String username){..logic..}
}

和服务:

public UserService {
    @Autowired
    private UserRepository userRepository;

    public Optional<User> findByUsername(String username){ ..calling repository.. }
}

并且在我的@Controller class 我想从 UserService

获取 User 实例

但我不知道应该从@Service 返回什么 - 可选并检查它是否在控制器中存在(),或者只是空?我很困惑..

我正在尝试将尽可能多的逻辑移动到@Service 层中,因此检查可选的似乎不是个好主意。

谢谢!

理想情况下,您应该抛出异常。这是这样做的最佳做法。但是,如果需要,您也可以坚持使用 null,但异常会清楚地说明问题所在,并且在后期阶段非常易于维护和调试。

你可能喜欢做这样的事情

findByUsername(String username){

  // find user
 if(user !=null){
  return User
 }
 else 
   throw new UserNotFoundException();


}

按照此 link 了解如何创建自定义例外。 http://techekiras.blogspot.in/2015/02/how-to-create-custom-exception-in-java.html

以及如何处理这些 http://www.ekiras.com/2015/02/how-to-create-nested-custom-exceptions-in-java.html

在您的控制器上捕获这些异常以采取进一步的行动。

在Java8中出现了新的可能性。为 return 提供服务 Optional. It is a good way to make explicit in the signature that it may return a null. You will be forced to check if it is Null but can be very helpfull to avoid the famous NullPointerException

import java.util.Optional;

[...]

public Optional<User> getUser(String userName){

     User user = userDAO.getByUsername(username);
     return Optional.of(user);
}