【发布时间】:2018-07-13 02:35:36
【问题描述】:
我开始使用 spring 框架进行 java 开发,为了获得比 hello world 更复杂的东西,我找到了本教程并尝试遵循。
https://www.toptal.com/spring/beginners-guide-to-mvc-with-spring-framework
我发现的问题是,建议的代码:由于我的扩展“CrudRepository”的类返回一个可选 和 Optional ,因此在 DevelopersController.java 内部在 eclipse 中出现错误而不仅仅是一个技能/开发者对象。
@RequestMapping(value="/developer/{id}/skills", method=RequestMethod.POST)
public String developersAddSkill(@PathVariable Long id, @RequestParam Long skillId, Model model) {
Skill skill = skillRepository.findOne(skillId);
Developer developer = repository.findOne(id);
if (developer != null) {
if (!developer.hasSkill(skill)) {
developer.getSkills().add(skill);
}
repository.save(developer);
model.addAttribute("developer", repository.findOne(id));
model.addAttribute("skills", skillRepository.findAll());
return "redirect:/developer/" + developer.getId();
}
model.addAttribute("developers", repository.findAll());
return "redirect:/developers";
}
我查找了有关 Java 8 Optional 的一些信息,但由于我仍然缺乏编码经验,我很难理解如何正确使用它。
我将代码更改为并设法解决了其中一个错误......
@RequestMapping(value="/developer/{id}/skills", method=RequestMethod.POST)
public String developersAddSkill(
@PathVariable Long id,
@RequestParam Long skillId,
Model model) {
Optional<Skill> skill = skillRepository.findById(skillId);
Optional<Developer> developer = repository.findById(id);
developer.get().getSkills();
if (developer != null) {
if (!developer.get().hasSkill(skill)) {
developer.get().getSkills().add(skill);
}
repository.save(developer);
model.addAttribute("developer", repository.findById(id));
model.addAttribute("skills", skillRepository.findAll());
return "redirect:/developer/" + developer.getId();
}
return "Confused";
}
但我的 Eclipse 中仍然出现以下错误:
- 类型 List 中的方法 add(Skill) 不适用于参数(可选)
- 方法 getId() 未为 Optional 类型定义
- CrudRepository 类型中的方法 save(S) 不适用于参数(可选)
我该如何解决这个问题? 还有为什么行:
if (!developer.get().hasSkill(skill)) {
显示没有错误,但行:
developer.get().getSkills().add(skill);
会吗?
【问题讨论】:
-
你为什么不试试这样:可选
optionalDeveloper = repository.findById(id);开发者 developer = optionalDeveloper.get(); if (developer != null) { if (!developer.hasSkill(skill)) { developer.getSkills().add(skill); } repository.save(开发者); model.addAttribute("开发者", repository.findOne(id)); model.addAttribute("技能", SkillRepository.findAll());返回“重定向:/developer/” + developer.getId(); }