如何从YML文件为Java对象属性设置默认值并保证非空
从YML配置为对象属性设置默认值并保证非空
基于Spring Boot环境的实现方案
以下是三种常见的落地方式,可根据场景选择:
方案一:配置绑定+JSR-380校验(推荐)
让对象成为Spring管理的Bean,自动注入YML配置作为默认值,同时通过注解强制校验非空。
- YML配置保持不变:
default: title: newBook
- 修改对象类:
@Data @NoArgsConstructor @AllArgsConstructor @Component // 交由Spring管理实例 @ConfigurationProperties(prefix = "default") // 绑定配置前缀 @Validated // 开启参数校验 public class MyObj { // 规范类名首字母大写 @NotBlank(message = "图书标题不能为空") // 强制title非空 private String title; // 自动注入YML中default.title的值作为默认值 }
- 引入校验依赖(Maven示例):
若项目未自带校验包,需添加以下依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
方案二:@Value直接注入+校验
用@Value注解直接绑定配置值,配合校验注解保证非空:
@Data @NoArgsConstructor @AllArgsConstructor @Component @Validated public class MyObj { @NotBlank(message = "图书标题不能为空") @Value("${default.title}") // 直接注入YML配置值 private String title; }
方案三:手动创建实例时处理(非Spring Bean场景)
如果MyObj不是Spring管理的Bean,可通过Environment获取配置值,手动设置默认值并校验:
// 注入Environment @Autowired private Environment env; // 创建实例并处理默认值与非空校验 MyObj obj = new MyObj(); String defaultTitle = env.getProperty("default.title"); // 若当前title为空,使用YML配置的默认值 obj.setTitle(Optional.ofNullable(obj.getTitle()).orElse(defaultTitle)); // 手动校验非空 if (StringUtils.isBlank(obj.getTitle())) { throw new IllegalArgumentException("图书标题不能为空"); }
内容的提问来源于stack exchange,提问作者loid forger
相关产品推荐
相关产品推荐

