当找不到用户时,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);
}
正如标题所说,我有一些像这样的存储库:
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);
}