Java 类型不匹配绑定错误的自定义错误消息
考虑以下方法:Java 类型不匹配绑定错误的自定义错误消息,java,spring,spring-mvc,Java,Spring,Spring Mvc,考虑以下方法: @RequestMapping(value="/foo", method=RequestMethod.POST) public void doIt(@Valid PojoRequest request, BindingResult result) throw Exception { if(result.hasErrors()) { throw new Exception(result.getFieldError().getDefaultMessag
@RequestMapping(value="/foo", method=RequestMethod.POST)
public void doIt(@Valid PojoRequest request, BindingResult result) throw Exception
{
if(result.hasErrors())
{
throw new Exception(result.getFieldError().getDefaultMessage());
}
}
class PojoRequest {
String int id;
//getter
}
当我使用字符串参数正确测试此方法时,我得到以下错误:
无法将类型为“java.lang.String”的属性值转换为属性“id”所需的类型“int”;嵌套异常是java.lang.NumberFormatException:对于输入字符串:“abc”
我可以从BindingResult
中找到这些数据,但我要做的是向字段本身添加注释,并将错误消息写入注释中。这可能吗?用一种方法解决,我很感激其他方法
这不是一个可读的答案,这实际上是一个黑客行为,请谨慎使用。
我使用自定义验证器定义了自定义注释:
@Documented
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidIntegerValidator.class)
public @interface ValidInteger {
String message() default "not a valid integer!";
int min() default 1;
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class ValidIntegerValidator implements ConstraintValidator<ValidInteger, Object> {
@Override
public void initialize(ValidInteger constraintAnnotation) {
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
try {
Integer.parseInt((String) value);
} catch (NumberFormatException e) {
return false;
}
return true;
}
}
Setter不是必需的,但如果您定义了一个Setter,则应将对象
作为参数
这满足了我的需要,而且非常难看。更漂亮的解决方案是值得赞赏的 为什么让客户端设置数据库密钥?这只是一个伪代码。虽然原始代码与此类似,但在该代码部分附近没有任何数据库操作。我不知道你为什么这么说@NeilMcGuiganSo您只想更改错误消息。。。
class PojoRequest {
@ValidInteger(message = "id is faulty")
private Object id;
public int getId() {
return (int) id;
}
public void setStartHour(Object id) {
this.id = id;
}
}