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请求转换为业务调用(例如,sopersonService.create(person)
);所有业务逻辑,例如检查与系统的一致性,都会进入您的服务中。(还要注意的是,您确实需要阅读关于SpringMVC参数绑定特性的文档,因为您永远不需要自己getParameter
;它是Spring提供的最强大的工具之一。)