1

我正在使用带有注释的 Spring 验证机制。验证必须可在messages_en.properties. 为此目的,服务password.min=4于该文件中的条目。

如何根据messageSourcebean中的设置配置@Size验证器?

public class SubmitModel {

@Size(min = "#{new Integer(messageSource[login.ok])}") //does not work. @Size expects integer value
private String password;

}

豆配置:

<bean id="messageSource"
    class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename">
        <value>lang\messages</value>
    </property>
</bean>

我已经尝试配置静态常量,但这里再次需要一个常量表达式。仅供参考,需要这种机制来验证控制器中的传入请求:

@RequestMapping (value = "/device/{devicename}", method = RequestMethod.GET, produces="text/xml")
@ResponseBody
public String handleRequest(@PathVariable("devicename") String devicename, @Valid @ModelAttribute SubmitModel model, BindingResult errors) throws UCLoginException { ... }

密码必须长于login.ok值的典型示例:http://my.domain.com:8080/submit/device/SPAxxxxx?name=adam&password=454321

4

1 回答 1

1

这是不可能的。Annotation 属性的值必须是常量,编译后不能更改。Validator如果您需要该级别的可自定义配置,请使用自定义。

@Inject
private SubmitModelValidator customValidator;

public String handleRequest(@PathVariable("devicename") String devicename, @Valid @ModelAttribute SubmitModel model, BindingResult errors) throws UCLoginException { ... }
    customValidator.validate(model, errors);
    if (errors.hasErrors()) {
        ...
    }
    ...
}

你已经为其创建了一个 bean 并从属性中设置各种字段SubmitModelValidator的实现在哪里。Validator@Value

于 2013-10-31T14:04:58.547 回答