gpt4 book ai didi

java - 无法转换为 java.base/java.util.Optional

转载 作者:行者123 更新时间:2023-12-02 10:40:44 25 4
gpt4 key购买 nike

我想使用 Spring 和 Angular 实现用户身份验证。我试过这个:

    @PostMapping("request")
public ResponseEntity<?> resetRequest(@RequestBody PasswordResetDTO resetDTO) {
return userRepository.findByUsername(resetDTO.getName()).map(user -> {

if (!user.getEmail().equals(resetDTO.getEmail())) {
return new ResponseEntity<>("NAME_AND_EMAIL_MISMATCH", HttpStatus.BAD_REQUEST);
}

resetHandler.sendResetMail(user);

return ok(resetDTO);
})
.orElseGet(() -> notFound().build());
}

界面:

public interface UserRepository extends CrudRepository<Users, Integer> {
Optional<Users> findByUsername(String username);

Optional<Users> findByEmail(String email);

Optional<Users> findByResetCode(String code);
}

实现:

    @Override
public Optional<Users> findByUsername(String username) {
String hql = "select e from " + Users.class.getName() + " e where e.login = ?";
Query query = entityManager.createQuery(hql).setParameter(0, username);
Optional<Users> users = (Optional<Users>) query.getSingleResult();
return users;
}

但我得到用户无法转换为 java.base/java.util.Optional

实现这个的正确方法是什么?我应该使用可选还是应该仅使用空检查?

最佳答案

首先按照 JB Nizet 的建议,使用类型化查询。如果您不确定数据库是否始终有您的查询记录(因为您使用可选,您可能不会),则第二种使用 getResultList。

这里更新了findByUsername:

@Override
public Optional<Users> findByUsername(String username) {
String hql = "select e from " + Users.class.getName() + " e where e.login = ?";
TypedQuery<Users> query = entityManager.createQuery(hql, Users.class).setParameter(0, username);
List<Users> users = query.getResultList();
return users.isEmpty() ? Optional.empty() : Optional.of( users.get(0) );
}

关于java - 无法转换为 java.base/java.util.Optional,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52936111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com