@Controller にメソッド署名があります
@RequestMapping("/saveCandidate")
public String saveCandidate(Model model,
@ModelAttribute("candidateFromRequest") Candidate candidateFromRequest,
@ModelAttribute("skillsIdList") Set<Skill> skills,
@ModelAttribute("vacanciesForCandidate") Set<Vacancy> vacanciesForCandidate)
などの形式:
<form action="saveCandidate" id="formId" method="POST">
....
<input type="submit" value="save changes"/>
</form>
デバッグでは、すべての @ModelAttribute エンティティが要求に応じていることがわかります。
なぜ結果として私は見る
クライアントから送信された要求が構文的に正しくありませんでした。HTTP ステータス 400 -
私のブラウザで
コード:
@ModelAttribute(value = "candidateFromRequest")
public Candidate loadCandidateById(@RequestParam(required = false) Integer id) {
if (id!= null)
return candidateService.findById(id);
return null;
}
@ModelAttribute(value = "skillsIdList")
public Set<Skill> getSkillListById(@RequestParam(required = false) List<Integer> skills,@ModelAttribute("skills")List<Skill> allSkills ) {
if (skills== null)
return null;
Set<Skill> returnList = new HashSet<Skill>();
for(Integer skillId:skills){
for(Skill skill:allSkills){
if(skillId.equals(skill.getId())){
returnList.add(skill);
break;
}
}
}
return returnList;
}
@ModelAttribute(value = "vacanciesForCandidate")
public Set<Vacancy> vacanciesForCandidate(@RequestParam(required = false)
List<Integer> vacancies,@ModelAttribute("vacancies")List<Vacancy> allVacancies ) {
if (vacancies== null)
return null;
Set<Vacancy> returnList = new HashSet<Vacancy>();
for(Integer vacancyId:vacancies){
for(Vacancy vacancy:allVacancies){
if(vacancyId.equals(vacancy.getId())){
returnList.add(vacancy);
break;
}
}
}
return returnList;
}
私が見たデバッグでは、そのメソッド、上記の書き込みは有効な値を返します。
メソッドを GET に置き換えたところ、ブラウザのリクエストが表示されました。
http://localhost:8080/ui/saveCandidate?name=Evgeniy&surname=Rogachev&phone=02&resumeUrl=http%3A%2F%2Fgoogle.com&id=1013&skills=2&skills=3&skills=4&skills=5&skills=6&skills=7&skills=8&vacancies=6&vacancies=12&vacancies=14