【问题标题】:How to pass parameters through Java Validator messages?如何通过 Java Validator 消息传递参数?
【发布时间】:2015-09-10 06:29:46
【问题描述】:

目前,我有类似的东西

@NotNull(message="{err.required}")
@Size(min=1, message="{err.required}")
private String firstName;

在我的messages.properties,我有

err.required={0} is required.

它有效,但它打印出firstName is required.,这很丑。它将变量名firstName 作为参数传递给{0}

如何改为传递“名字”之类的内容?所以会变成First name is required.

【问题讨论】:

  • 可能 SpEL 可以用于此。你可以看看它(Spring Expression Language)。

标签: java spring jakarta-ee spring-validator


【解决方案1】:

你可以这样做:

@NotNull(message="First name {err.required}")
@Size(min=1, message="First name {err.required}")
private String firstName;

@NotNull(message="Last name {err.required}")
@Size(min=1, message="Last name {err.required}")
private String lastName;

在属性文件中

err.required= is required. 

或者如果你想更清楚,你可以添加你自己的注解和验证器:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { NotEmptyValidator.class })
public @interface NotEmpty {

    String message() default "{customMessage} is required.";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };

    String customMessage() default "";
}

public class NotEmptyValidator implements ConstraintValidator<NotEmpty, String>
{
    @Override
    public void initialize(NotEmpty notEmpty)
    {        
    }

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

然后是你的领域

@NotEmpty(message="{err.required}"
          customMessage="First name")
private String firstName;

在属性中(虽然它不是强制性的,因为您可以将值默认为这个):

err.required={customMessage} is required.

【讨论】:

  • 这将添加已验证字段的内容。问题是关于在消息中传递自定义字符串。
  • @UweAllner 我已经修改了答案以涵盖您认为 OP 的意思。
  • Uwe 是对的,我不是在寻找值本身,但我希望将任何字符串作为参数提供。等我回家后我会试试这个。谢谢!
  • @m3th0dman 是 {customMessage} 自动添加到 context 吗?
  • @beerbajay 是的;我测试了代码,它可以工作。请注意,我使用的是 BeanValidation 的 HibernateValidator 实现,而不是 SpringValidator,我不知道它是依赖于实现还是 API 特定的东西。
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 2017-09-25
  • 2020-01-27
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
相关资源
最近更新 更多