인프런 커뮤니티 질문&답변

차가운물님의 프로필 이미지

작성한 질문수

[개정판 2023-11-27] Spring Boot 3.x 를 이용한 RESTful Web Services 개발

유효성 체크를 위한 Validation API 사용

Size 어노테이션이 작동을 안하는 것 같은데 어떤 것을 체크해야하나요?

작성

·

1.8K

2

소스

디펜던시

컨트롤러 소스

포스트맨

@Size 어노테이션이 없어서 ctrl+enter를 쳐서 자동으로 디펜던시 추가 후 임포트 했습니다.

post요청으로 이름을 한 글자를 보내도 201번 응답이 옵니다.

어떤 부분을 디버깅해야 하나요? 

답변 4

6

윗분 링크 참고 해서 아래만 폼에 붙여서 201만 나오는 문제 해결 했습니다. 감사합니다~

<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.7.Final</version>
</dependency>

전 스프링 부트 2.5.7 인데요.

댓글 쓰신분이 공유해주신대로 dependency hibernate.validator 1개 추가했고

400 BAD_REQUEST 적용되었습니다 !

 

-> 참고로, validation-api-2.0.1.Final 등을 연결하면.... Size/Path 가 import 되긴하는데 적용이 되지 않더라고요.

아래와 같은 Message 뜨면서 Hibernate Validater 같은거 추가하라고 뜨네요.

javax.validation.NoProviderFoundException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.

4

저는 2.4.10 버전에서  Size, Past 어노테이션이 

아예 나오지 않았는데요

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation/2.4.10 사이트 참고하여 아래를 pom.xml에 추가하여 해결하였습니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
    <version>2.4.10</version>
</dependency>

감사합니다 덕분에 해결했습니다.

1

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요, 이도원입니다. 

올려 주신 코드에서 추가할 내용은 없습니다. 같은 코드로 제가 다시한번 빌드시 제쪽에서는 문제가 발생하지 않았습니다.

@Size annotation은 Spring Boot의 기본 설정에 포함된 라이브러리입니다. 다음과 같이 기본 설정으로 Spring Boot 애플리케이션을 생성해도  javax.validation.constraints.Size; 사용에는 문제가 없습니다. @Size annocation이 없어서 디펜던시에 추가하셨다고 했는데, 새로 추가된 버전과 중복 클래스로 충돌되어 사용할 수 없게 된게 아닌가 싶습니다. 

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

우선 추가하신 dependency를 삭제하시고, 왜 추가되지 않았는지에 대한 문제를 찾아보시는게 좋을 것 같습니다. 

감사합니다.