• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

ContentValidator에서 오류가 발생하는 질문드립니다.

20.01.26 17:32 작성 조회수 165

0

예제를 따라하다보면 오류가 발생하는데요 ContentValidator.java 에서 sWriter.length() < 3 이부분에서 에러가 발생하는것을 확인했습니다.

package com.study.springboot.springbootbbs;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class ContentValidator implements Validator {
    @Override
    public boolean supports(Class<?> arg0){
        return ContentDto.class.isAssignableFrom(arg0); // 검증할 객체의 클래스 타입 정보
    }

    @Override
    public void validate(Object obj, Errors errors){
        ContentDto dto = (ContentDto)obj;

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "writer", "writer is empty"); // 값이 있는지 없는지 체크해서 없으면 errors에 에러메세지를 삽입
        String sWriter = dto.getWriter();
        System.out.println("sWriter.length()" + sWriter);
        if(sWriter.length() < 3){ // 3글자 이하면 수동으로 에러 메세지 삽입
            errors.rejectValue("writer", "writer is too short.");
        }

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "content", "content is empty");
    }
}

위에 내용처럼 작성을 했는데, 실행후 접속해보면

java.lang.NullPointerException: null 라는 에러가 발생합니다. system.out.println으로 sWriter를 찍어보면 null로 나오더라구요 처음 접속할때 쿼리스트링이 없는상태로 들어가서 sWriter의 값이 null로 나오는것으로 보이는데 null인 상태에서 length()를 사용하니 그런것으롭 보이는데요

요약하면 

if(sWriter.length() < 3){ // 3글자 이하면 수동으로 에러 메세지 삽입
errors.rejectValue("writer", "writer is too short.");
}

이 부분대문에 에러가 발생하고 이유는 sWriter의 값이 null로 콘솔에 나왔다 입니다!

제가 인텔리제이에서 jsp로 실습을 해보려했더니 프로젝트구조 때문인지 제대로 실습이 되지않아 머스체티를 뷰템플릿으로 사용해서 실습을하고있는데 혹시 그런부분때문에 발생하는 에러일까요..? 혹시 이유를 아시는지 궁금합니다

지금은 위에 length()를 확인해 에러메세지를 넣는 부분을 없애고 진행하고있는데 강사님의 실습환경에서는 sWriter의 값이 어떻게 나오는지 궁금합니다!

답변 1

답변을 작성해보세요.

0

ValidationUtils.rejectIfEmptyOrWhitespace 에 의해서 null 이나 공백문자는 이미 걸러져서 들어옵니다.

그러므로 아래 부분에서 체크할 때 null 이 나오는 것 자체가 이상합니다.

null 이라면 위의 ValidationUtils.rejectIfEmptyOrWhitespace  에서 걸려져야 하기 때문입니다.

위 문장은 통과하고 아래 부분에서만 에러가 난다면 dto 변수에서 값을 제대로 가져오지 못한다는 것입니다.

그렇다면 앞의 Ex09 예제에서 값이 제대로 나오는지 확인해 보셔야 할 것 같습니다.

제가 강좌에 첨부해 드린 예제를 다운받아서 해 보시기 바랍니다.