Javax 验证 - 来自属性的值

标签 java spring-boot

我有一个 Spring Boot 项目(当前使用 2.2.6),带有 Web Starter。

在某些类中我使用验证注释,例如

@Size(max = 1, min = 2)

@Pattern(regexp = "[0-9]+")

在字段上,来自 javax.validation.constraints

它按预期工作,但注释的值是硬编码的。我想动态设置它们,例如从属性文件中读取,因为在某些情况下值可能不同。

可以吗,怎么做?

最佳答案

这些注释是由 Hibernate Validator 项目在底层实现的。

来自注释值的默认消息由于默认插值器(Hibernate validator 的概念)而出现。

所以我认为解决方案应该包括两个步骤:

  1. 根据 spring Validator 项目创建自定义消息插值器。抢夺here有关详细信息,他们有一个从某些文件系统资源读取消息插值器的示例。目前这与 spring/spring boot 无关。

  2. 将您在第 1 步中创建的消息插值器与 Spring Boot 应用程序集成。

为此,您的代码应包含如下内容:

Validation.byDefaultProvider().configure().messageInterpolator(
  new MyCustomMessageInterpolator(
    Validation.byDefaultProvider().configure().getDefaultMessageInterpolator())
);

我找到了有关此类集成的教程 here

本教程似乎没有告诉您应该将此代码放在哪里,所以我认为您应该尝试一些监听器来监听“ApplicationStarted”事件或其他内容

关于Javax 验证 - 来自属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61768104/

相关文章:

java - 如何在 Spring Boot 应用程序上为数据库连接设置 TCP NODELAY

java - Java 中的重复数据删除 API

java - 使用 Java JAXB 围绕 List 的附加 XML 实体

java - 扩展SpringBootInitializer时,为什么要覆盖configure方法?

rest - Spring Boot 从 Controller 的 RequestMapping 返回 PNG

java - Spring Boot Rest - 如何配置 404 - 找不到资源

java - 如何在 Tomcat 8 中使用 Bean Validation 2.0 (JSR 380) 功能?

java - 使用元素长度在对象数组中升序/降序

java - Bufferedreader解释?

java - @JsonSerialize 没有从 Controller springboot 2.2.4 转换我的日期格式