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

이영주님의 프로필 이미지
이영주

작성한 질문수

스프링 부트 - 핵심 원리와 활용

@Value 검증 적용 관련 질문드립니다.

해결된 질문

작성

·

148

·

수정됨

0

@Value를 적용한 필드에 @Min(1) 과 같은 검증을 적용할 수는 없을까요?

아래 소스코드처럼 작성해 MyDataSourceValueConfig를 빈으로 등록하면 @Validated가 동작해 검증될 줄 알았는데 적용되지 않습니다. 원인이 무엇인지 궁금합니다...

(코드 내 $가 포함되면 이상하게 동작해,

$를 #로 변경하였습니다.)

package hello.datasource;

import hello.datasource.MyDataSource;
import jakarta.validation.constraints.Min;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.annotation.Validated;

import java.time.Duration;
import java.util.List;

@Slf4j
@Configuration
@Validated
public class MyDataSourceValueConfig {

    @Value(“#{my.datasource.url}")
    private String url;
    @Value(“#{my.datasource.username}")
    private String username;
    @Value(“#{my.datasource.password}")
    private String password;
    @Value(“#{my.datasource.etc.max-connection}")
    @Min(1)
    private int maxConnection;
    @Value(“#{my.datasource.etc.timeout}")
    private Duration timeout;
    @Value(“#{my.datasource.etc.options}")
    private List<String> options;

    @Bean
    @Validated
    public MyDataSource myDataSource1() {
        return new MyDataSource(url, username, password, maxConnection, timeout, options);
    }

    @Bean
    public MyDataSource myDataSource2(
        @Value(“#{my.datasource.url}") String url,
        @Value(“#{my.datasource.username}") String username,
        @Value(“#{my.datasource.password}") String password,
        @Value(“#{my.datasource.etc.max-connection}") int maxConnection,
        @Value(“#{my.datasource.etc.timeout}") Duration timeout,
        @Value(“#{my.datasource.etc.options}") List<String> options
    ) {
        return new MyDataSource(url, username, password, maxConnection, timeout, options);
    }
}


답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 이영주님

@Value를 사용한 필드는 검증되지 않습니다.

@ConfigurationProperties 를 사용하셔야 검증이 됩니다.

감사합니다.

 

이영주님의 프로필 이미지
이영주
질문자

아~ 그렇군요! @Value에 대해 더 공부해야겠네요 😅

답변 감사합니다! 🙇‍♀

추가로 @Value를 사용한 필드는 왜 검증이 안되는건지 궁금한데 어떤 식으로 찾아봐야할 지 힌트를 주실 수 있을까요...?

김영한님의 프로필 이미지
김영한
지식공유자

네 영주님

정확히는 필드 검증 자체를 @ConfigurationProperties에서만 지원합니다.

@Value가 과거부터 존재했고, 이후에 @ConfigurationProperties가 추가되면서 새로운 기능들이 이쪽에 많이 들어오게 되었습니다.

감사합니다.

이영주님의 프로필 이미지
이영주
질문자

아! 필드 검증 자체를 @ConfigurationProperties만 지원하는군요...!

몰랐습니다 ㅎㅎ 알려주셔서 정말 감사합니다!

이영주님의 프로필 이미지
이영주

작성한 질문수

질문하기