在Spring Boot中,我们可以使用Java Bean Validation(JSR 303/JSR 349)来对YAML文件中的数据进行校验。为了实现这个功能,你需要遵循以下步骤:
- 添加依赖
在你的pom.xml
文件中,添加以下依赖:
org.springframework.boot spring-boot-starter-validation
- 创建一个配置类
创建一个配置类,用于读取YAML文件并将其映射到一个Java对象。例如,假设你有一个名为app-config.yml
的YAML文件,内容如下:
app: name: MyApp version: 1.0.0
首先,创建一个与YAML文件结构相匹配的Java类:
import javax.validation.constraints.NotBlank; public class AppConfig { @NotBlank private String name; @NotBlank private String version; // Getters and setters }
然后,创建一个配置类,用于读取YAML文件并将其映射到AppConfig
对象:
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration @ConfigurationProperties(prefix = "app") public class AppConfigProperties { private AppConfig appConfig; // Getter and setter }
- 在application.yml中引用YAML文件
在你的application.yml
文件中,添加以下内容,以引用app-config.yml
文件:
spring: profiles: include: app-config
- 在
app-config.yml
文件中添加校验规则
在app-config.yml
文件中,添加校验规则。例如,要求name
和version
字段不能为空:
app: name: MyApp version: 1.0.0 _app.name: javax.validation.constraints.NotBlank.message: Name cannot be blank _app.version: javax.validation.constraints.NotBlank.message: Version cannot be blank
- 使用
@Validated
注解进行校验
在需要进行数据校验的地方,使用@Validated
注解。例如,在一个控制器类中:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RestController; @RestController @Validated public class MyController { @Autowired private AppConfigProperties appConfigProperties; @InitBinder protected void initBinder(final WebDataBinder binder) { binder.setValidator(new AppConfigValidator()); } // Your controller methods }
- 创建一个自定义校验器
创建一个实现org.springframework.validation.Validator
接口的类,用于执行实际的校验操作:
import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; @Component public class AppConfigValidator implements Validator { @Override public boolean supports(Class> clazz) { return AppConfig.class.equals(clazz); } @Override public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "app.name.notBlank"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "version", "app.version.notBlank"); } }
现在,当你的应用程序启动时,Spring Boot将自动对app-config.yml
文件中的数据进行校验,并在控制器类中使用自定义校验器进行校验。如果数据不符合校验规则,将抛出相应的异常。