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

时间:2015-07-09 21:32:37

标签: spring service null optional

正如标题所说,我有一些存储库,如:

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

和服务:

public UserService {
    @Autowired
    private UserRepository userRepository;

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

在我的@Controller类中,我想从UserService获取User实例

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

我正试图将这么多逻辑移到@Service层,所以检查可选可能看起来不太好。

谢谢!

2 个答案:

答案 0 :(得分:2)

理想情况下,您应该做的是抛出异常。这是最好的做法。但是,如果你愿意,你也可以坚持使用null,但是一个例外可以清楚地说明问题是什么,并且在后期阶段是非常可维护和可再分配的。

你可能喜欢这样做

findByUsername(String username){

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


}

请点击此链接了解如何创建自定义例外。 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

在控制器上捕获这些异常以采取进一步措施。

答案 1 :(得分:0)

在Java 8中有一种新的可能性。使服务返回Optional。这是一种在签名中明确表示它可以返回null的好方法。您将被迫检查它是否为空但对avoid the famous NullPointerException

非常有帮助
import java.util.Optional;

[...]

public Optional<User> getUser(String userName){

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