使用Spring @Value时如何进行简单的属性验证

Tom*_*asz 6 java validation spring annotations

如何检查是否${service.property}不是空字符串,如果是,则抛出某种可读的异常?它必须在Bean创建期间发生。

@Component
public class Service {

  @Value("${service.property}")
  private String property;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找最简单的方法(编写最少的代码)。如果使用注释,那就太好了。

我当前的解决方案是在属性的设置器中执行“手写”验证,但是对于这种简单的事情来说,代码太多了。

提示:我一直在寻找使用SpEL的方法,因为我已经在内部使用它了@Value,但据我所知,它并不是那么容易/干净。但是本可以忽略一些东西。

澄清:预期的行为是该应用程序将无法启动。目的是确保设置所有属性,尤其是确保字符串属性不为空。错误应该清楚地说明,缺少什么。我不想设置任何默认值!用户必须全部设置。

Fel*_*ati 4

您可以将该组件用作属性占位符本身。然后您可以使用任何您想要的验证。

@Component
@Validated
@PropertySource("classpath:my.properties")
@ConfigurationProperties(prefix = "my")
public class MyService {

    @NotBlank
    private String username;

    public void setUsername(String username) {
        this.username = username;
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

你的my.properties文件将如下所示:

my.username=felipe
Run Code Online (Sandbox Code Playgroud)