我有一个自定义域类,其中包含一个带有String的构造函数,以及一个toString()方法。构造函数对输入字符串进行解码,对其执行验证并在无效时抛出IllegalArgumentException。
我想直接绑定到此字段,如下所述:http://blog.springsource.org/2009/11/17/spring-3-type-conversion-and-validation/(请参阅“配置约定”部分)。
这很好用&我正在显示Spring解析的错误消息(typeMismatch on barcodeInfo
)。
我知道我可以使用messageSource条目自定义此错误消息,例如
typeMismatch.barcodeInfo=Invalid format
但是,我要显示的错误消息并不总是相同,它取决于输入字符串的值。因此,我想显示我最初在构造函数中抛出的IllegalArgumentException中使用的错误消息。这可能吗?
我正在寻找一种适用于Spring WebFlow的解决方案。
答案 0 :(得分:1)
您可能想要检查BindingErrorProcessor
使用的WebDataBinder
。在那里,您可以实现自己的自定义逻辑,将异常转换为验证错误。
注意:
IllegalArgumentException
区分开来。)WebDataBinder
方法中使用自定义BindingErrorProcessor
初始化@InitBinder
(或将特定WebBindingInitializer
设置为您的处理程序适配器。)答案 1 :(得分:1)
正如帕维尔在回答中提到的,你可以通过实施BindingErrorProcessor
来实现这一点。
它应该是这样的:
...
import org.springframework.validation.DefaultBindingErrorProcessor;
...
@Controller
public class YourController {
...
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setBindingErrorProcessor(new DefaultBindingErrorProcessor() {
@Override
public void processPropertyAccessException(
PropertyAccessException ex, BindingResult bindingResult) {
if (ex.getPropertyName().equals("fieldInQuestion")) {
Throwable cause = ex.getMostSpecificCause();
FieldError fieldError;
fieldError = new FieldError(
bindingResult.getObjectName(),
"fieldInQuestion",
cause.getMessage());
bindingResult.addError(fieldError);
} else {
super.processPropertyAccessException(ex, bindingResult);
}
}
});
}
}