我有一个bean,其中有一个类型为List的字段。
public List<MyClass> getter() {
return field;
}
public void setter(MyClass[] source) {
this.field = Arrays.asList(source);
}
我已经实现了转换器Converter<String, MyClass>
,它也可以工作。如果可以将字符串转换为MyClass,则将其转换,否则,将引发异常,并且FieldError
中将包含Errors errors = binder.getBindingResult();
的实例。问题在于,FieldError#getRejected
方法String
具有有效值和无效值的逗号分隔列表,这可能会引起误解。而且没有空间,这很难看。像这样:
Field has invalid value of "valid,invalid"
我希望
Field has invalid value of "invalid"
换句话说,如何使转换和验证分别对每个值起作用?
答案 0 :(得分:1)
尽管spring的方法不是很聪明,但在逻辑上是正确的。以下代码可以帮助您找到无效值。
FieldError fieldError = bindingResult.getFieldError();
if (fieldError != null && fieldError.contains(TypeMismatchException.class)) {
TypeMismatchException typeMismatchException = fieldError.unwrap(TypeMismatchException.class);
ConversionFailedException conversionFailedException = findConversionFailedException(typeMismatchException);
if (conversionFailedException != null) {
Object value = conversionFailedException.getValue();
// get the invalid field value
}
}
/**
* Recursively find the ConversionFailedException
* @param target
* @return
*/
public ConversionFailedException findConversionFailedException(Throwable target) {
Throwable cause = target.getCause();
if (cause == null) {
return null;
} else if (cause instanceof ConversionFailedException) {
return (ConversionFailedException)cause;
}
return findConversionFailedException(target);
}