java.util.NoSuchElementException:不存在值; Apache Cassandra-春季启动

时间:2019-05-28 10:16:14

标签: spring-boot cassandra

我正在使用以下依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>

我需要查询users键空间中存在的myks

从控制器部分,我正在调用服务

userService.authenticateUser(username, password);

在服务方法中,我调用了存储库

logger.info("Here : " + username);
boolean userExists = userRepository.existsById(username);
logger.info("userExists : " + userExists);
if (userExists) {
    User user = userRepository.findByusername(username).get();
    return user;
}
return null;

以下是我的存储库

@Repository
public interface UserRepository extends CrudRepository<User, String> {
    Optional<User> findByusername(final String username);
}

假设在表中我没有与用户kri_test的条目,并且用户发送的用户名为kri_test的输入,那么我将遇到异常java.util.NoSuchElementException: No value present

即使不打印服务类中存在的日志语句

2 个答案:

答案 0 :(得分:1)

它与Cassandra配置等无关。您正在从userRepository.findByusername(username)获得Optional.empty()。然后,您可以在不首先调用get()的情况下调用isPresent()方法。

您可以用这根衬板解决您的问题;

return userRepository.findByusername(username).orElse(null);

答案 1 :(得分:0)

这是两个控制器,所以当我们尝试调用任何控制器时,我们主要使用 URL 来调用任何类型的控制器。 1.您可能在URL或 2.您正在尝试调用不在服务类中的数据。

@RequestMapping("/topics")//URL
public List<Topic> getAllTopics() {
    return topicService.getAllTopics();     
}
@RequestMapping("/topics/{id}")
public Topic getTopic(@PathVariable String id){
    return topicService.getTopic(id);
}