본문 바로가기

Spring

[Spring] Bean property '필드명' is not readable or has an invalid getter method 에러 해결

728x90
반응형

에러 내용

Request 클래스의 validator 에러처리를 추가하고 있었는데 아래와 같은 에러를 발견하였다.

Request processing failed; nested exception is org.springframework.beans.NotReadablePropertyException: Invalid property 'nickname' of bean class [AccountUpdateDto.Nickname]: Bean property 'nickname' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?

getter/setter가 붙어있는데도 저런 에러가 떠서 대체 뭐지 했는데..

 

원인, 해결

    public void validate(Object target, Errors errors) {

        AccountUpdateDto.Nickname accountUpdateDto = (AccountUpdateDto.Nickname)target;

        if(isSameNickname(accountUpdateDto)) {
            errors.rejectValue("nickname", "wrong.nickname", "수정될 닉네임을 정확히 입력해주세요.");
        }

        if(!isValidNickname(accountUpdateDto.getPrevNickname())) {
            errors.rejectValue("nickname", "wrong.nickname", "존재하지 않는 계정입니다.");
        }

        if(isValidNickname(accountUpdateDto.getNewNickname())) {
            errors.rejectValue("nickname", "wrong.nickname", "이미 사용중인 닉네임 입니다.");
        }

    }

errors.rejectValue("nickname", ...)
이 부분이 원인이었다. dto 클래스에는 nickname 이라는 프로퍼티가 없었다.

    public static class Nickname {

        private String prevNickname;

        @NotBlank
        @Length(min = 3, max = 20)
        @Pattern(regexp = "^[ㄱ-ㅎ가-힣a-z0-9_-]{3,20}$")
        private String newNickname;

    }

에러정보를 담는거겠거니 하고 프로퍼티명에 주의 안하고 적었는데 이렇게 들통이 나버렸다 ㅎㅎ;

    @Override
    public void validate(Object target, Errors errors) {

        AccountUpdateDto.Nickname accountUpdateDto = (AccountUpdateDto.Nickname)target;

        if(!isValidNickname(accountUpdateDto.getPrevNickname())) {
            errors.rejectValue("prevNickname", "wrong.prevNickname", "존재하지 않는 계정입니다.");
        } else {
            if(isValidNickname(accountUpdateDto.getNewNickname())) {
                errors.rejectValue("newNickname", "wrong.newNickname", "이미 사용중인 닉네임 입니다.");
            }

            if(isSameNickname(accountUpdateDto)) {
                errors.rejectValue("newNickname", "wrong.newNickname2", "수정될 닉네임을 정확히 입력해주세요.");
            }
        }


    }

위처럼 프로퍼티명 일치하게 붙여서 해결하였다. 실수하지 않도록 주의하자!!

728x90
반응형