inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

예제로 배우는 스프링부트 입문

(10) ValidationUtils 사용하기

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

294

LUA

작성한 질문수 33

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의 값이 어떻게 나오는지 궁금합니다!

spring-boot

답변 1

0

이재환

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

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

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

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

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

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

java Code로 DI 사용하기

0

124

1

sts 24년 8월 3일 최신버전에서 toolchain 오류

0

728

2

34강 3.2.1버전에서 update만 안됨

0

428

1

26강, springboot 3.1.5에서는 에러

0

335

1

33강 jpa 질문입니다

0

527

2

25강 security 관련 에러 (Is there an unresolvable circular reference?)

0

2196

1

스프링 버전 관리 관련하여 문의드립니다.

0

516

1

security 로그인 관련 질문합니다.

0

315

1

getContent,getWriter 안만들고 어떻게 사용했나요?

0

284

1

스프링부트 환경 설정 관련

0

418

1

강의자료 관련

0

371

2

안녕하세요 선생님. 오류 관련 질문 드립니다.

0

403

1

sqlSessionFactory는 생성안해도 되나요??

0

402

1

.예제 소스 어떻게 그대로 복사해서 실행하나요?

0

407

2

안녕하세요 질문입니다.

0

264

2

에러 발생..

0

291

1

@Transactional 선언 위치

0

301

1

외부 톰캣을 사용할 경우

0

247

1

getFieldError 질문

0

274

1

@Valid 질문입니다

1

272

1

createPage.jsp 질문

0

245

1

ContentValidator 클래스 내 validate 메소드 질문

0

175

1

(09) Validator 사용하기 @ModelAttribute("dto") 가 사용된 이유?

0

264

1

Spring Boot 2.5에서 MyBatis선택이 안되네요..

0

345

2