文章参考: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;
}
}
注意点:
-
@Validated
是Spring支持的; -
@NotEmpty
等校验注解时JAVA支持的; -
支持内部类参数校验;需要在声明内部对象属性时使用
@ 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
属性上不存在校验注解,故内部类的属性不生效;