0
点赞
收藏
分享

微信扫一扫

SpringBoot项目启动时校验@ConfigurationProperties注解(对于内部类的支持)

文章参考:JAVA基础篇(4)-Validation验证框架

1. 引入依赖

        <!--Validation bean验证框架-->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
        <!-- hibernate validator-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.0.Final</version>
        </dependency>

2. 测试代码

import lombok.Data;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotNull;

@Data
@ConfigurationProperties("test")
@Component
@Validated
public class TestProperties {


    @NotNull(message = "name不能为null")
    private String name;

    @NotNull(message = "correct不能为空")
    private CorrectRemoteProperties correct;

    private AutoCorrectCallBackProperties autoCorrectCallBack;
    
    @Data
    public static class AutoCorrectCallBackProperties {

        /**
         * 接口地址
         */
        @NotEmpty(message = "配置文件必须含有[url]回调地址")
        private String url;

    }

    @Data
    public static class CorrectRemoteProperties {

        @NotEmpty(message = "配置文件必须含有[server]")
        private String server;
        
        private String appId;

        private String secretKey;
    }
}

注意点:

  1. @Validated是Spring支持的;
  2. @NotEmpty等校验注解时JAVA支持的;
  3. 支持内部类参数校验;需要在声明内部对象属性时使用@ NotNull注解(表示该对象不能为空,层级校验,对象不能为空时,继续校验对象的参数是否合法)

3. 测试

test:
  name: 测试代码
  correct:
    appId: sasa

结果:


Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'test' to com.tellme.config.TestProperties failed:

    Property: test.correct.server
    Value: null
    Reason: 配置文件必须含有[server]

结论:可以支持内部类参数校验;

test:
  name: 测试代码
  correct:
    appId: appId信息
    server: sever信息

结果:项目正常启动;

因为com.tellme.config.TestProperties#autoCorrectCallBack属性上不存在校验注解,故内部类的属性不生效;

举报

相关推荐

0 条评论