使用数组约束参数作为消息中变量的Bean验证消息插值

梅萨罗斯

是否可以在javax.validation错误消息插值中加入int数组参数?

我想验证不同长度的字符串,并开始实现自定义约束:

@Constraint(validatedBy = {BarcodeValidator.class})
public @interface Barcode {
String message() default "{validation.Barcode.message}";
  int[] lengths();
}

验证者:

public class BarcodeValidator implements ConstraintValidator<Barcode, String> {

  private List<Integer> lengths;

  @Override
  public void initialize(Barcode barcode) {
    lengths = new ArrayList<>(barcode.lengths().length);
    for (int l : barcode.lengths()) lengths.add(l);
  }

  @Override
  public boolean isValid(String value, ConstraintValidatorContext context) {
    return value != null && lengths.contains(value.length());
  }
}

我希望收到一条自定义消息,例如:条形码必须为12/23/45个字符长!

我已经知道我可以在消息中使用批注参数,因此我想执行以下操作:

validation.Barcode.message = The barcode must be ${'/'.join(lengths)} character long!

这样的事情是否可能发生,还是我应该以其他方式来做?

(PS:我的第一个问题是关于SO的。)

梅萨罗斯

最终我找到了解决方案。
验证器类:

public class BarcodeValidator implements ConstraintValidator<Barcode, String> {

  private List<Integer> lengths;

  @Override
  public void initialize(Barcode barcode) {
    lengths = new ArrayList<>(barcode.lengths().length);
    for (int l : barcode.lengths()) lengths.add(l);
  }

  @Override
  public boolean isValid(String value, ConstraintValidatorContext context) {
    context.unwrap(HibernateConstraintValidatorContext.class).addExpressionVariable("joinedLengths", String.join(" / ", lengths));
    return value != null && lengths.contains(value.length());
  }
}

*。特性:

validation.Barcode.message = The barcode must be ${joinedLengths} character long!

还尝试命名该参数lengths,但没有成功-它可能已绑定到该类型int[]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自定义bean验证不是`@ inject` CDI bean,并且不插值消息吗?

来自分类Dev

Laravel数组验证消息值

来自分类Dev

带有动态参数的Bean验证消息

来自分类Dev

带有动态参数的Bean验证消息

来自分类Dev

消息插值Spring验证期间发生异常

来自分类Dev

使用组件作为验证错误消息

来自分类Dev

如何使用数组值作为函数参数的变量名,以从JavaScript中的数组创建表?

来自分类Dev

Yesod Julius消息插值

来自分类Dev

使用jQuery验证在错误消息中显示输入值

来自分类Dev

PHP中的数组变量插值

来自分类Dev

PHP中的数组变量插值

来自分类Dev

C#Serilog:如何使用字符串插值记录日志并将参数名称保留在消息模板中?

来自分类Dev

jQuery验证:更改消息中的动态参数

来自分类Dev

使用Birt报告参数验证消息

来自分类Dev

Laravel消息作为请求中的数组或JSON

来自分类Dev

R gstat中的空间插值,不显示消息

来自分类Dev

R gstat中的空间插值,不显示消息

来自分类Dev

如何使用消息挂钩在数组中推送值

来自分类Dev

Laravel 5.4 数组验证作为单字段消息

来自分类Dev

Spring bean验证消息解析

来自分类Dev

验证错误消息值

来自分类Dev

验证错误消息值

来自分类Dev

在视图模型中使用mvvm消息的字符串值作为变量

来自分类Dev

Grails inList约束在错误消息中获取inList映射的值

来自分类Dev

使用变量的值作为PHP中的数组名称?

来自分类Dev

使用COALESCE函数在变量中附加消息

来自分类Dev

在错误消息中返回自定义验证方法参数

来自分类Dev

在消息中包含用于自定义验证规则的参数

来自分类Dev

Toastr使用Laravel会话变量作为警报消息

Related 相关文章

热门标签

归档