0

我正在使用 Spring 3.1.1.RELEASE。我有一个具有以下属性的模型

import javax.validation.constraints.Size;

@Size(max=15)
private String name;

我在我的控制器中验证模型我正在运行

@RequestMapping(value = "/save", method = RequestMethod.POST)
public ModelAndView save(final Model model,
                         @Valid final MyForm myForm,

我想让“15”值来自属性文件而不是硬编码,但不清楚这是否可能或如何完成。有任何想法吗?

4

1 回答 1

1

这是不可能的。您作为max属性值提供的常量表达式是在编译时添加的。无法在运行时更改注解的值。因此,无法从您读取的属性文件中设置它

Validator相反,您可以做的是为具有该字段的类创建并注册自己的。例如,

public class MyValidator implements Validator {

    public void validate(Object target, Errors errors) {
        MyObject obj = (MyObject) target;
        int length = getProperties().get("max.size");
        if (obj.name.length() > length) {
            errors.rejectValue("name", "String length is bigger than " + length);
        }
    }

    public boolean supports(Class<?> clazz) {
        return clazz == MyOBject.class;
    }
}

看看Spring 的验证框架

于 2013-08-09T20:05:07.703 回答