首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不能强制转换为java.base/java.util.Optional

不能强制转换为java.base/java.util.Optional
EN

Stack Overflow用户
提问于 2018-10-23 03:01:47
回答 2查看 5.2K关注 0票数 0

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

代码语言:javascript
复制
    @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());
    }

接口:

代码语言:javascript
复制
public interface UserRepository extends CrudRepository<Users, Integer> {
    Optional<Users> findByUsername(String username);

    Optional<Users> findByEmail(String email);

    Optional<Users> findByResetCode(String code);
}

实施:

代码语言:javascript
复制
    @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;
    }

但我得到了Users cannot be cast to java.base/java.util.Optional

实现这一点的正确方法是什么?我应该使用Optional,还是应该只使用null check?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-23 03:34:20

首先,按照JB Nizet的建议,使用类型化查询。其次,如果您不确定数据库是否总是有查询的记录,请使用getResultList (因为您使用optional,所以很可能不会)。

下面是更新后的findByUsername

代码语言:javascript
复制
@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) );
}
票数 1
EN

Stack Overflow用户

发布于 2021-04-05 03:09:30

代码语言:javascript
复制
  public Optional<User> editUser(int id) {
    
  return userRepository.findById(id);
}

@RequestMapping("/edit-user")
public String editUser(@RequestParam int id, HttpServletRequest request) {
     Optional<User> user = userService.editUser(id);
     System.out.println("user = "+user);
     request.setAttribute("users", user);
     request.setAttribute("mode", "MODE_UPDATE");         
    return "welcomepage";
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52936111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档