복붙노트

[SPRING] Spring Boot 애플리케이션의 @Value 주석이 달린 필드에 제약을가한다.

SPRING

Spring Boot 애플리케이션의 @Value 주석이 달린 필드에 제약을가한다.

@Value 주석이 달린 다음 필드에 기본값을 지정합니다.

@Value("${tolerance.percentage:25}")
private int tolerance;

이 코드는 해당 소품이 존재하는 경우 필드의 값을 시스템 특성 "tolerance.percentage"로 올바르게 초기화합니다. 존재하지 않으면 기본값은 25입니다.

하지만이 int 필드에 최소값과 최대 값을 적용하여 한 단계 더 나아가고 싶습니다. 전체 숫자로 백분율보다 작은 백분율을 나타내므로 Murphy의 법칙은 누군가 (아마 나)가 외부에서 속성을 잘못 구성 할 수 있음을 의미합니다. 응용 프로그램은 런타임에 이상한 것들을 시작했을 것이고, 이는 내가 좋아하는 것에 너무 늦은 것입니다. 응용 프로그램 시작시 속성이 "101"또는 "-1"로 설정된 경우 오류가 발생합니다. 혹시 @Value 주석에서 101로 기본값을 설정하려고하면 오류가 발생하기를 바라지 만,이 질문의 목적에는 중요하지 않습니다. 여기 내가 시도한 것이있다.

//@Min and @Max don't produce the intended behavior when combined with @Value
@Min(0)
@Max(100)
@Value("${tolerance.percentage:25}")
private int tolerance;

@Value가 알고있는 int 필드에 최소값과 최대 값을 적용 할 수 있습니까?

해결법

  1. ==============================

    1.정규 유효성 검증 API 주석을 사용한 유효성 검증은 특정 상황에서만 작동합니다.

    정규 유효성 검증 API 주석을 사용한 유효성 검증은 특정 상황에서만 작동합니다.

    따라서 예상되는 속성을 포함하는 클래스를 만들고 @ConfigurationProperties와의 바인딩을 사용하려는 @Value 대신에 @Value를 사용하는 것이 좋습니다. (대신 @Range를 사용할 수도 있습니다).

    @ConfigurationProperties(prefix="tolerance")
    public ToleranceProperties {
    
        @Range(min=1, max=100)
        private int percentage = 25; 
    
        // Here be a getter/setter
    }
    

    이것은 @Configuration 클래스에 결합되어 @ EnableConfigurationProperties (ToleranceProperties.class)를 추가하고 속성이 필요한 곳이면 어디서든 사용할 수 있습니다. 자세한 내용은 typesafe 구성 속성을 참조하십시오.

    참고 : @Component로 선언 할 수도 있습니다.

  2. from https://stackoverflow.com/questions/44007492/enforce-constraints-on-value-annotated-field-in-spring-boot-application by cc-by-sa and MIT license