Java Spring验证程序将日期与数据库中的另一个日期进行比较

Java Spring验证程序将日期与数据库中的另一个日期进行比较,java,validation,spring-mvc,hibernate-validator,Java,Validation,Spring Mvc,Hibernate Validator,我想写一个验证器,它将检查用户是否足够大,可以成为另一个用户的家长。例如,我有一段代码,在这里我可以获取表单信息并检查错误: @RequestMapping(value = "/setParent", method = RequestMethod.POST) public ModelAndView setParent(@Valid @ModelAttribute("person") Person parent, BindingResult bindingResult,

我想写一个验证器,它将检查用户是否足够大,可以成为另一个用户的家长。例如,我有一段代码,在这里我可以获取表单信息并检查错误:

    @RequestMapping(value = "/setParent", method = RequestMethod.POST)
    public ModelAndView setParent(@Valid @ModelAttribute("person") Person parent, BindingResult bindingResult,
        HttpServletRequest request) {
    logger.info("set parent controller");
    if (bindingResult.hasErrors()) {
        return new ModelAndView("index", "parent", parent);
    } else {
        String personName = request.getParameter("personName");
        String relation = request.getParameter("relation");
        Person person = new Person(personName, null);
        int pID = databaseModel.getPersonID(person);
        int parentID = databaseModel.getPersonID(parent);
        int rID = databaseModel.getRelationID(relation);
        databaseModel.insertRelation(pID, parentID, rID);
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("setParentSuccess");
        modelAndView.addObject("parent", databaseModel.getPersonTree(parentID));
        return modelAndView;
    }

}
我已经开始编写自定义验证器:

    @Documented
    @Retention(value = RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = CheckOlderThanValidator.class)
    @Target({ ElementType.FIELD })
    public @interface OlderThan {
    String message() default "my custom validator";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}


    public class CheckOlderThanValidator implements ConstraintValidator<OlderThan, Date> {

    @Autowired
    private DatabaseModel model;

    @Override
    public boolean isValid(Date date, ConstraintValidatorContext arg1) {
            return false;   
    }

}
@已记录
@保留(值=RetentionPolicy.RUNTIME)
@约束(validatedBy=CheckOlderThanValidator.class)
@目标({ElementType.FIELD})
公共@interface OlderThan{
字符串消息()默认为“我的自定义验证器”;
类[]组()默认值{};

类一般来说,Bean验证需要验证特定对象是否具有某种内部一致性状态,而不是使用外部可变数据源对其进行验证。我通常希望看到这种逻辑在您的业务层中实现,抛出一个自定义子类
IllegalStateException
(->HTTP 422)如果有问题。好的,处理这种检查的正确方法是什么?你能用一种语言举例说明吗?那么,在这种情况下,我应该在controller方法中进行比较,并将错误插入ModelAndView或任何其他方法吗?你应该在你的业务服务中进行。遵循责任原则,Spring MVC Web控制器应该只负责将Web请求转换为业务调用(例如,so
personService.create(person)
);所有业务逻辑,例如检查与系统的一致性,都会进入您的服务中。(还要注意的是,您确实需要阅读关于SpringMVC参数绑定特性的文档,因为您永远不需要自己
getParameter
;它是Spring提供的最强大的工具之一。)