Skip to content

@ConfigurationProperties class's default values are not visible in the Errors instance passed to Validator.validate(Object target, Errors errors) #25356

@cdprete

Description

@cdprete

Spring Boot version: 2.4.3-SNAPSHOT

Hi.
I've a @ConfigurationProperties annotated class which implements the Validator interface to validate some fields, but the method in the subject is never called causing the validation to fail.
In particular, I've the following structure:

public class SecurityRequestExtractionProperties {

    private CookieExtractionNames cookie = new CookieExtractionNames();
    private HeaderExtractionNames header = new HeaderExtractionNames();

    // getters and setters here

    public static class CookieExtractionNames {

        private String requestId = "My-Request-ID";
        private String sessionId = "My-Session-ID";

        // getters and setters here
    }

    public static class HeaderExtractionNames {
        private String requestId = "My-Request-ID";
        private String sessionId = "My-Session-ID";
        private String tenant = "My-Tenant";

        // getters and setters here
    }

}

and

@ConfigurationProperties(prefix = SpringSecurityRequestExtractionProperties.PREFIX)
public class SpringSecurityRequestExtractionProperties
        extends SecurityRequestExtractionProperties implements Validator {

    public static final String PREFIX = "acme.security.request.extraction";

    @Override
    public boolean supports(Class<?> clazz) {
        return clazz == SpringSecurityRequestExtractionProperties.class;
    }

    @Override
    public void validate(Object target, Errors errors) {
        ValidationUtils.rejectIfEmpty(errors, "cookie", "cookie.empty");
    }

}

In Spring Boot 2.1.2 the default values specified in the class where used when no value was explicitly configured, but in the specified version the validation actually fails with

Caused by: org.springframework.boot.context.properties.bind.validation.BindValidationException: Binding validation errors on acme.security.request.extraction
   - Field error in object 'acme.security.request.extraction' on field 'cookie': rejected value [null]; codes [cookie.empty.acme.security.request.extraction.cookie,cookie.empty.cookie,cookie.empty.acme.commons.security.api.SecurityRequestExtractionProperties$CookieExtractionNames,cookie.empty]; arguments []; default message [null]

Metadata

Metadata

Assignees

Labels

type: regressionA regression from a previous release

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions