我开始使用 spring 框架进行 java 开发,为了获得比 hello world 更复杂的东西,我找到了本教程并尝试遵循。
https://www.toptal.com/spring/beginners-guide-to-mvc-with-spring-framework https://www.toptal.com/spring/beginners-guide-to-mvc-with-spring-framework
我发现的问题是,建议的代码:在 DevelopersController.java 内部在 eclipse 中出现错误,因为我扩展“CrudRepository”的类返回可选 和可选 而不仅仅是技能/开发人员对象。
@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 可选的信息,但由于我仍然缺乏编码经验,所以我很难理解如何正确使用它。
我将代码更改为并设法解决了其中一个错误......
@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";
}
但我的日食中仍然出现以下错误:
- List 类型中的方法 add(Skill) 不适用于参数(可选)
- 对于类型可选,方法 getId() 未定义
- CrudRepository 类型中的方法 save(S) 不适用于参数(可选)
我怎样才能解决这个问题?
另外为什么该行:
if (!developer.get().hasSkill(skill)) {
显示没有错误,但该行:
developer.get().getSkills().add(skill);
does?