SpelEvaluationException

알파로그·2023년 3월 16일
0

Error

목록 보기
19/37

Spel / Evaluation / Exception

철자 / 평가 / 예외

직역하면 철자가 맞지 않다는 이야기 같다.


✏️ 발단

개인 프로젝트 중 data 를 insert 하는 과정에서 문제가 발생했다.

  • controller
    @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";
    }
  • root cause

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";
    }

정상적으로 작동한다.. ㅎㅎ

profile
잘못된 내용 PR 환영

0개의 댓글