use*_*475 8 java java-8 option-type
我正在尝试创建一个允许用户更新、编辑、删除等的网站,并且我已经到达更新或编辑用户\xe2\x80\x99s信息的部分。我使用不同的方法多次尝试,但似乎无法克服该错误。我完全忘记了Optional<>我只是不明白\xe2\x80\x99t得到它。我已阅读https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html,但我不明白它应该如何编码,它只是不点击。如果有人可以告知如何在我的代码中对其进行编码并请解释它,我将非常感激。也许是因为我工作过度并且没有睡觉,但我似乎无法纠正这个错误。这是我尝试编辑用户信息时在页面上收到的错误:
\n\n出现意外错误(类型=内部服务器错误,状态=500)。\n对于输入字符串:“id”\njava.lang.NumberFormatException:对于输入字符串:id
\n\n //Repository\n\n public interface UserRepository extends CrudRepository<User, Integer> {\n }\nRun Code Online (Sandbox Code Playgroud)\n\n这是用户服务
\n\n //UserService\n\n @Service\n @Transactional\n public class UserService {\n\n private final UserRepository userRepository;\n\n public UserService(UserRepository userRepository) {\n this.userRepository=userRepository;\n\n }\n public void saveMyUser(User user) {\n userRepository.save(user);\n }\n\n public List<User> showAllUsers(){\n\n List<User> users = new ArrayList<User>();\n for(User user: userRepository.findAll()) {\n users.add(user);\n }\n\n return users;\n }\n\n public void deleteMyUser(int id) {\n userRepository.deleteById(id);\n\n }\n\n public User editUser (int id) {\n\n return userRepository.findById(id);//I also get an error here as well\n }\n\n }\nRun Code Online (Sandbox Code Playgroud)\n\n这是控制器
\n\n //Application Controller\n\n @Controller\n public class ApplicationController {\n\n @Autowired\n private UserService userService;\n\n // THIS IS WHERE I GET THE ERROR\n\n @RequestMapping("/edit-user")\n public String editUser(@RequestParam int id,HttpServletRequest request) {\n\n /* OPTIONAL<?> is this where i would implement the \n optional what do i have to put here exactly? \n I tried some ways I read about but its not working for me */\n\n request.setAttribute("user", userService.editUser(id));\n request.setAttribute("mode", "MODE_UPDATE");\n return "welcome";\n }\n\n }\nRun Code Online (Sandbox Code Playgroud)\n\n感谢您提前提供的帮助,我对此感到有点沮丧,因为我整晚都在尝试纠正这个错误。
\nS.D*_*eko 14
有多种方法可以将选项转换为实体。您可以使用以下内容:
使用 get() 方法:
public User editUser (int id) {
return userRepository.findById(id).get();
}
Run Code Online (Sandbox Code Playgroud)
使用 orElse 方法:
public User editUser (int id) {
/* new User() is stab if user was not found */
return userRepository.findById(id).orElse(new User());
}
Run Code Online (Sandbox Code Playgroud)
使用 orElseThrow 方法:
public User editUser (int id) {
/* Throw exception if user was not found*/
return userRepository.findById(id).orElseThrow(IllegalArgumentException::new));
}
Run Code Online (Sandbox Code Playgroud)
至于控制器,它将是这样的:
@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";
}
Run Code Online (Sandbox Code Playgroud)
您的主题也有类似的问题: