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

标签 java spring validation annotations

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

@Component
public class Service {

  @Value("${service.property}")
  private String property;
}

我正在寻找最简单的方法(最少编写的代码)。如果使用注释会很棒。

我目前的解决方案是在属性的 setter 中执行“手写”验证,但是对于这样简单的事情来说代码有点太多了。

提示:我正在寻找一些使用 SpEL 的方法,因为我已经在 @Value 中使用了它,但据我所知,它不会那么容易/干净。但可能忽略了一些事情。

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

最佳答案

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

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

    @NotBlank
    private String username;

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

    ...
}

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

my.username=felipe

关于java - 使用 Spring @Value 时如何进行简单的属性验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29798190/

相关文章:

asp.net-mvc - 流畅的验证、域和 View 模型

javascript - 如何向输入字段添加验证?绑定(bind) JSON 模型不起作用

JavaFX - 图像网址未加载

java - 如何从java applet 中获取信息?

java - 客户端发送的请求在语法上使用@DateTimeFormat 是不正确的

java - Spring通过子类的方法名来声明事务语义

jquery - 当对按钮使用 jQuery .on() 方法而不是表单 - 提交事件时,html5 表单在未经验证的情况下提交。为什么?

java - 我可以在 Java 中使用反射重新定义方法/构造函数吗?

java - json 解析器不适用于 froyo 和 Gingerbread ,但适用于 ics

java - 用JPA重置MySql数据库的自增值