类型不匹配无法从类型"可选<User>"转换为"用户"



我正在尝试创建一个允许用户更新,编辑,删除等的网站,并且我已经进入了更新或编辑用户信息的部分。我已经使用不同的方式尝试了多次,但我似乎无法克服错误。我完全忘记了可选<>我只是不明白。我已经阅读了 https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html,但我不明白应该如何编码,它只是没有点击。如果有人可以告知它应该如何在我的代码中编码并请解释一下,我将不胜感激。也许是因为我过度劳累并且没有睡觉,但我似乎无法纠正此错误。这是我尝试编辑用户信息时在页面上遇到的错误:

出现意外错误(类型=内部服务器错误,状态=500(。 对于输入字符串:"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";
}
}

提前感谢您的帮助,我对此有点沮丧,因为我整晚都在尝试纠正此错误。

有几种方法可以从选项转换为实体。您可以使用以下内容:

使用 get(( 方法:

public User editUser (int id) {
return 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));
}

至于控制器,它将是这样的:

@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<> 传递给实体类

相关内容

最新更新