Spring MVC:Trgger手动验证表单对象

有时可能需要在Spring MVC @Controller中使用手动验证 使用Spring的org.springframework.validation.ValidationUtils类非常简单。 了解如何在两种不同的情况下调用验证器。

方案1 –调用验证

在这种情况下,我有一个带有用户名字段的用户表单。 用户名字段使用自定义验证器进行验证,以验证例如数据库中的存在。

public class User {

    @UserExists
    private String username;

}

在控制器类中,我有一个处理该对象的POST方法的方法:

@Autowired
private org.springframework.validation.Validator validator;

@RequestMapping(value = "/user", method = RequestMethod.POST)
public String validate(@ModelAttribute User user, Errors errors) {

    ValidationUtils.invokeValidator(validator, user, errors);

    if (errors.hasErrors()) {
        // error, show errors to the user
    }

    // success, form is valid!
}

org.springframework.validation.ValidationUtils是用于调用org.springframework.validation.Validator的类。

请注意,用户参数后面是org.springframework.validation.Errors对象。 Spring初始化了这个对象,但是它是空的,可以传递给invokeValidator方法。

方案2 –通过提示调用验证

在这种情况下,用户表单变得更加复杂:

@GroupSequence(value = {ValidationOrder.First.class, ValidationOrder.Second.class})
interface ValidationOrder {
    interface First {}
    interface Second {}
}


public class User {

    @UserExists(groups = ValidationOrder.First.class)
    @UserIsEntitledToDiscount(groups = ValidationOrder.Second.class)
    private String username;

}

感谢@GroupSequence我可以决定验证顺序。 要触发验证,我需要将其他参数传递给invokeValidator方法,以便正确使用组:

ValidationUtils.invokeValidator(validator, user, errors, ValidationOrder.class);

源代码

源代码包含所有这三种方法,因此您可以快速比较它们: https : //github.com/kolorobot/spring-mvc-beanvalidation11-demo

翻译自: https://www.javacodegeeks.com/2016/04/spring-mvc-trgger-manual-validation-form-object.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值