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;
    }
}