Spel / Evaluation / Exception
철자 / 평가 / 예외
직역하면 철자가 맞지 않다는 이야기 같다.
개인 프로젝트 중 data 를 insert 하는 과정에서 문제가 발생했다.
@PostMapping("/addProfile")
public String addProfile (ProfileDto profileDto,Model model) {
Profile createProfile = Profile.createProfile(
profileDto.getName(),
profileDto.getDesc(),
profileDto.getSns()
);
Long profile = service.save(createProfile);
log.info("profile = {}", profile);
model.addAttribute("profile", profile);
return "profileAdd";
}
db 에 저장된 객체를 model 에 넘겨주고 html 에서 타임리프로 객체의 name 을 매핑했는데
아래와 같은 예외가 발생했다.
SpelEvaluationException: EL1008E:
Property or field 'name' cannot be found on object of type
'java.lang.Long' - maybe not public or not valid?
대충 봐도 name 이 없다는 것 같다.
혹시 getter 를 빼먹었나?
확인해보니 entity 부터 dto 까지 잘 붙어있었다.
원인을 못찾겠어서 디버그 모드를 실행했는데 profile 에 필드가 하나도 없고 딸랑 1 만 저장되어있었다.
무슨일이지?
확인해보니 Service 에서 저장하고 반환값을 Long 으로 설정해 두었는데
Profile 객체로 변환하지 않고 그대로 model 에 넘겨버렸던 것이다…
아래처럼 id 값으로 객체를 찾아주었다.
@PostMapping("/addProfile")
public String addProfile (ProfileDto profileDto,Model model) {
Profile createProfile = Profile.createProfile(
profileDto.getName(),
profileDto.getDesc(),
profileDto.getSns()
);
Long profileId = service.save(createProfile);
Profile profile = service.findOne(profileId);
log.info("profile = {}", profile);
model.addAttribute("profile", profile);
return "profileAdd";
}
정상적으로 작동한다.. ㅎㅎ