类型不匹配不能从类型 Optional<User> 转换为 User

问题描述 投票:1回答:1

我正在尝试创建一个允许用户更新、编辑、删除等功能的网站,我已经到了更新或编辑用户信息的部分。我已经用不同的方法尝试了很多次,但我似乎不能通过这个错误。我完全不知道可选<>我就是不明白。我已经阅读了 https:/docs.oracle.comjavase8docsapijavautilOptional.html。但我不明白它应该如何编码,它只是不点击。如果有人可以请告知它应该如何在我的代码编码,并请解释它,我将非常感激。也许是因为我工作过度,没有睡觉,但我似乎不能纠正这个错误。这是我在页面上得到的错误,当我试图编辑一个用户的信息。

There was an unexpected error (type=Internal Server Error, status=500).For input string: "id "java.lang.NumberFormatException。对于输入字符串:id

    //Repository

    public interface UserRepository extends CrudRepository<User, Integer> {
     }

这里是用户服务

    //UserService

    @Service
    @Transactional
    public class UserService {

        private final UserRepository userRepository;

        public UserService(UserRepository userRepository) {
            this.userRepository=userRepository;

        }
        public void saveMyUser(User user) {
            userRepository.save(user);
        }

        public List<User> showAllUsers(){

            List<User> users = new ArrayList<User>();
            for(User user: userRepository.findAll()) {
                users.add(user);
            }

            return users;
        }

        public void deleteMyUser(int id) {
            userRepository.deleteById(id);

        }

        public User editUser (int id) {

            return userRepository.findById(id);//I also get an error here as well
        }

    }

这里是控制器

    //Application Controller

    @Controller
    public class ApplicationController {

        @Autowired
        private UserService userService;

        // THIS IS WHERE I GET THE ERROR

        @RequestMapping("/edit-user")
        public String editUser(@RequestParam int id,HttpServletRequest request) {

            /* OPTIONAL<?> is this where i would implement the 
               optional what do i have to put here exactly? 
               I tried some ways I read about but its not working for me */

            request.setAttribute("user", userService.editUser(id));
            request.setAttribute("mode", "MODE_UPDATE");
            return "welcome";
        }

    }

谢谢你的帮助,提前我有点沮丧,因为我一直试图纠正这个错误,整个晚上。

optional
1个回答
4
投票

有几种方法可以将一个选项转换为一个实体。你可以使用以下几种方法。

使用get()方法:

 public User editUser (int id) {
      userRepository.findById(id).get();
 }

使用orElse方法

public User editUser (int id) {
    /* new User() is stab if user was not found */
    return userRepository.findById(id).orElse(new User());
}

使用orElseThrowMethod:

public User editUser (int id) {
        /* Throw exception if user was not found*/
        return userRepository.findById(id).orElseThrow(IllegalArgumentException::new));
    }

至于controller,它将会是这样的。

        @RequestMapping("/edit-user")
        public String editUser(@RequestParam int id,HttpServletRequest request) {

            User user = userService.editUser(id);

            request.setAttribute("user", user);
            request.setAttribute("mode", "MODE_UPDATE");
            return "welcome";
        }

你的题目也有类似的问题。

如何将 Optional<> 传递给实体类

希望能帮到你:)

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.