spring-boot - 使用属性文件常量作为注释值
问题描述
我成功地从我的属性文件/s (i18n) 加载了验证约束的消息,但是当我编写客户端验证时,很明显,消息和约束值的一个来源可以使整个过程不那么麻烦。
简而言之:有没有办法从属性文件中为大小注释加载一个值,例如 20?
@Size(max=20)
private String password;
我试过这样的行:
@Size(max="${constraint.value}")
// or
@Size(max=Integer.valueOf("#{constraint.value}"))
但是该值必须是整数和常数。
Edit1:客户端验证逻辑以单独库的形式重新完成,只是像 (5,10) for (min,max) 这样的值突出。(使用百里香叶)
<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
//...
// reading message from properties file
/*<![CDATA[*/
var errMessage = /*[[#{Size.user.userName}]]*/ 'default';
/*]]>*/
// adding a constraint to validationObj linked with one <input> element
validationObj.addSizeConstraint(ft.keyup,5,10,errMessage);
//...
</script>
Edit2:感谢@Pavel Horal 的评论,我使它像这样工作:
在服务器端:
public static final int USERNAME_MAX_SIZE=20;
@Size(max=USERNAME_MAX_SIZE)
private String userName;
在客户端(或客户端,因为它在服务器端用百里香进行了预处理)我得到这个值是这样的:
<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
//...
/*<![CDATA[*/
var value =/*[[${T(com.project.FormModel).USERNAME_MAX_SIZE}]]*/ 20;
/*]]>*/
//...
</script>
在我看来,这是一个更好的解决方案,因为我将所有值都保留在 javascript 代码之外。谢谢!
解决方案
@Size
注释的 max 参数只接受一个整数,所以下面的无论如何都不起作用。
@Size(max="${constraint.value}")
另一方面,下面也不起作用。"#{constraint.value}"
不会从您的属性文件中解析值。也"${constraint.value}"
不会在这里工作。
@Size(max=Integer.valueOf("#{constraint.value}"))
对于所有注解,注解参数根据定义应该是常量。所以我实际上无法想象您的问题的潜在解决方案。
推荐阅读
- ios - 无法在 Mac M1 中存档 ReactNative 项目
- flutter - 如何在颤振中添加侧边栏
- dart - Dart 2.14 中 Enum 接口的用例是什么
- spring-boot - 我可以让 Jobrunr 执行发生在与排队运行时不同的运行时吗?
- javascript - 为什么我们只在 if 条件之间使用 return 语句?
- linux - Yocto SecureBoot 构建不创建签名图像
- javascript - 自动选中复选框
- javascript - 解构赋值符号
- python - url 超出最大重试次数:'与 api.telegram.org 的连接超时。(连接超时=5.0)'))
- javascript - Bootstrap ICheck-Helper 事件在 jquery 步骤插件中不起作用