在Spring mvc 中使用alidate 首先需要实现alidate接口写道
@Component public class ReservationValidator implements Validator { private static final String COURT_NAME = "courtName"; private static final String DATE = "date"; public boolean supports(Class<?> clazz) { return Reservation.class.isAssignableFrom(clazz); } public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, COURT_NAME, "required.courtName", "Court name is required"); ValidationUtils.rejectIfEmpty(errors, DATE, "required.date", "Court date is required"); ValidationUtils.rejectIfEmpty(errors, "hour", "required.hour", "Court hour is required"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "player.name", "required.playername", "Player name is required"); ValidationUtils.rejectIfEmpty(errors, "sportType", "required.sportType", "SportType is required"); }
这是一个自定义的alidate实现类。 有了alidate 实现类那么在controller 中有该如何使用呢?这个就很简单了,只要controller 中注入这个validate 就可以直接使用了。
@Controller @RequestMapping("reservationForm") @SessionAttributes("reservation") public class ReservationFormController { @Autowired private ReservationService reservationService; @Autowired private ReservationValidator reservationValidator; @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor( dateFormat, true)); binder.registerCustomEditor(SportType.class, new PropertyEditorSupport() { @Override public void setAsText(String text) throws IllegalArgumentException { int sportTypeId = Integer.parseInt(text); SportType sportType = reservationService .getSportType(sportTypeId); setValue(sportType); } }); } /*** @ModelAttribute 注解用于定义全局的模式属性,这种属性对处理方法中返回的任意视图可用 ***/ @ModelAttribute("sportTypes") public List<SportType> populateSportTypes() { return reservationService.getAllSportType(); } @RequestMapping(method = RequestMethod.GET) public String setupForm(Model model, @RequestParam("username") String username) { Reservation reservation = new Reservation(); reservation.setPlayer(new Player(username, null)); model.addAttribute("reservation", reservation); return "reservationForm"; } @RequestMapping(method = RequestMethod.POST) public String submintForm( @ModelAttribute("reservation") Reservation reservation, BindingResult result, SessionStatus status, ModelMap model) { // validate 方法返回后 BindingResult 中就包含了校验过程的结果。 reservationValidator.validate(reservation, result); // 如果结果中包含错误 if (result.hasErrors()) { model.addAttribute("reservation", reservation); return "reservationForm"; } reservationService.make(reservation); // 删除session 中的对象 status.setComplete(); return "reservationSuccess"; }
那么如果实在分页控制的controller 中有该如何使用呢?这个就需要将 校验的具体实现分为多个 方法。如:
@Component public class PeriodicReservationValidator implements Validator { private static final Logger logger = Logger .getLogger(PeriodicReservationValidator.class); private static final String COURT_NAME = "courtName"; public boolean supports(Class<?> clazz) { return Reservation.class.isAssignableFrom(clazz); } public void validate(Object target, Errors errors) { logger.info("validate,All"); validateCourt(target, errors); validateTime(target, errors); validatePlayer(target, errors); } public void validateCourt(Object target, Errors errors) { logger.info("validateCourt"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, COURT_NAME, "required.courtName", "Court name is required"); } public void validatePlayer(Object target, Errors errors) { logger.info("validatePlayer"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "player.name", "required.playerName", "Player name is required"); } public void validateTime(Object target, Errors errors) { logger.info("validateTime"); ValidationUtils.rejectIfEmpty(errors, "fromDate", "required.fromDate", "Court fromDate is required"); ValidationUtils.rejectIfEmpty(errors, "toDate", "required.toDate", "Court toDate is required"); ValidationUtils.rejectIfEmpty(errors, "period", "required.period", "Court period is required"); ValidationUtils.rejectIfEmpty(errors, "hour", "required.hour", "Court hour is required"); }
package study.spring.mvc.controller; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.bind.support.SessionStatus; import org.springframework.web.util.WebUtils; import study.spring.mvc.domain.PeriodiceReservation; import study.spring.mvc.domain.Player; import study.spring.mvc.service.ReservationService; import study.spring.mvc.validator.PeriodicReservationValidator; /** * 使用@SessionAttributes 注解 为了支持表单的多次提交,并且在提交之间不会失去用户提供的数据。 使用@SessionAttributes * 注解所赋值可以使用SessionStatus对象删除。 * * @author Lenovo * */ @Controller @RequestMapping("periodicReservationForm") @SessionAttributes("reservation") public class PeriodReservationFormController { private static final Logger logger = Logger .getLogger(PeriodReservationFormController.class); @Autowired private ReservationService reservationService; @Autowired private PeriodicReservationValidator periodicReservationValidator; @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateFormat.setLenient(false); binder.registerCustomEditor(Date.class, new CustomDateEditor( dateFormat, true)); } /*** @ModelAttribute 注解用于定义全局的模式属性,这种属性对处理方法中返回的任意视图可用 ***/ @ModelAttribute("periods") public Map<Integer, String> periods() { Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "Daliy"); map.put(7, "Weekly"); logger.info(map); return map; } @RequestMapping(method = RequestMethod.GET) public String setupForm(Model model) { PeriodiceReservation reservation = new PeriodiceReservation(); reservation.setPlayer(new Player()); model.addAttribute("reservation", reservation); return "reservationCourtForm"; } @RequestMapping(method = RequestMethod.POST) public String submintForm( @ModelAttribute("reservation") PeriodiceReservation reservation, HttpServletRequest request, HttpServletResponse response, @RequestParam("_page") int currentPage, BindingResult result, SessionStatus status, ModelMap model) { Map<Integer, String> pageForms = new HashMap<Integer, String>(); logger.info("currentPage:" + currentPage); pageForms.put(0, "reservationCourtForm"); pageForms.put(1, "reservationTimeForm"); pageForms.put(2, "reservationPlayerForm"); if (request.getParameter("_cancel") != null) { return pageForms.get(currentPage); } else if (request.getParameter("_finish") != null) { logger.info("validate"); periodicReservationValidator.validate(reservation, result); if (!result.hasErrors()) { reservationService.makePeriodic(reservation); status.setComplete(); return "reservationSuccess"; } else { logger.info("validate fail:" + currentPage); return pageForms.get(currentPage); } } else { int targetPage = WebUtils.getTargetPage(request, "_target", currentPage); if (targetPage < currentPage) { return pageForms.get(targetPage); } switch (currentPage) { case 0: periodicReservationValidator.validateCourt(reservation, result); break; case 1: periodicReservationValidator.validateTime(reservation, result); break; case 2: periodicReservationValidator .validatePlayer(reservation, result); break; } if (!result.hasErrors()) { return pageForms.get(targetPage); } else { return pageForms.get(currentPage); } } } }
这样就可以在不同的页面使用不同的校验。
通过注解的方式校验示例代码如下:
/** *银行查询文件中条目模型 * * @author zhangwei * @version $Id: RemitInquiryOrder.java, v 0.1 2015年4月23日 下午1:53:08 zhangwei Exp $ */ public class RemitInquiryOrder extends BasicModel { /**UUID */ private static final long serialVersionUID = 4502527293700078171L; /******************银行查询数据******************/ /**银行业务编号**/ @NotNull @MinLength(value = 2) @MaxLength(value = 32) private String outBizNo; /**查询流水号**/ @NotNull @MinLength(value = 2) @MaxLength(value = 32) private String outInquiryId; /**清算流水号**/ @NotNull @RegExp(value = "^\\d{19}") private String settleSerialNo; /**币种**/ @NotNull @RegExp(value = "^[A-Z]{3}$") private String currency; /**汇款金额**/ @NotNull @RegExp(value = "^([1-9]\\d*[.]?)(\\d{0,2})|(0.)(([0-9]?)[1-9])?$") private String remitAmount; /**查询查复类型**/ @NotNull @RegExp(value = "^Q[1,2]\\d{4}$") private String inquiryType; /**报文内容**/ @MaxLength(value = 200) private String detail; /**过期时间**/ @MaxLength(value = 19) @RegExp(value = "(\\s{0}|\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})") private String expiryDate; /**备注**/ @MaxLength(value = 50) private String remark;
//校验对象 validator.validate(remitInquiryOrder, errors); if (errors.hasErrors()) { LoggerUtil .error(logger, "查询明细校验不合法,item={0},errors={1}", item, errors.getFieldErrors()); remitInquiryOrder.setResult(RemitConstants.DATA_FAIL); remitInquiryOrder.setResultCode(RemitInquiryResultCode.ILLEGAL_ARGUMENT.getCode()); }
<bean id="validator" class="org.springmodules.validation.bean.BeanValidator" p:configurationLoader-ref="configurationLoader" /> <bean id="configurationLoader" class="org.springmodules.validation.bean.conf.loader.annotation.AnnotationBeanValidationConfigurationLoader" />
相关推荐
Spring MVC的validate功能是用于处理数据验证的一种机制,它允许我们在服务器端对用户提交的数据进行校验,确保数据的有效性和准确性。以下是对Spring validate框架的详细说明: 1. **页面准备**: 在HTML页面中,...
在IT领域,尤其是在Java开发中,Spring框架是一个广泛使用的开源框架,它提供了全面的企业级应用程序开发解决方案。在Spring 3.x版本中,`validate`标签指的是Spring的验证机制,这是一个非常重要的功能,用于确保...
本项目" Maven+Spring MVC +Hibernate Validate" 提供了一种强大的技术栈,用于实现这一目标。它将Maven作为项目构建工具,Spring MVC作为后端控制器框架,而Hibernate Validate则负责服务端的数据验证。下面我们将...
Struts1.3.8使用validate 校验yyyyMM日期格式报错 博文链接:https://pharaohsprince.iteye.com/blog/234369
`SpringBoot validate`指的是Spring Boot集成Hibernate Validator进行参数验证的功能。Hibernate Validator是JSR-303/JSR-349标准的参考实现,提供了一种在Java应用中进行数据校验的优雅方式。 ** Hibernate ...
描述中的链接指向了iteye博客的一篇文章,虽然具体内容未提供,但我们可以推测文章可能详细解释了一个特定工具或库中的validate方法的使用,或者探讨了验证数据的一般策略和最佳实践。 标签"源码"意味着内容可能...
标题 "Maven+Spring MVC +Hibernate Validate(服务端验证)" 描述的是一个使用现代Java Web开发技术栈构建的应用示例,其中包括三个核心组件:Maven、Spring MVC和Hibernate Validate。这个项目展示了如何整合这些...
在实际应用中,`jQuery Validate`与后台框架(如Spring MVC或PHP Laravel)配合使用,可以实现前后端数据验证的一致性,确保提交到服务器的数据是经过验证的,减少无效请求,提升系统效率。此外,这个插件也与其他库...
该资源包是一个集成开发环境下的项目模板,主要涵盖了jQuery Validate、Spring 3.0、Struts 2.18和Hibernate 3这四个关键组件,它们是Java Web开发中的常用框架和技术。以下将分别对这些技术进行详细阐述。 **...
在Java后端,你可以使用诸如Spring Validation、Hibernate Validator等工具进行服务器端验证。这些验证框架提供注解方式定义验证规则,例如`@NotBlank`、`@Size`等。当前端提交数据到服务器时,服务器端会再次进行...
首先,`Spring Validate`是Spring框架的一个组成部分,它提供了JSR 303(Java Bean Validation)和Hibernate Validator的集成。JSR 303是一个标准,定义了如何在Java应用程序中进行对象级别的验证。Hibernate ...
Spring Boot技术知识点:如何使用@Validated注解来对邮箱字段进行数据校验
JQuery的validate验证框架是一个广泛使用的前端验证工具,它与jQuery库紧密结合,为HTML表单提供了强大的验证功能。这个框架简化了对用户输入数据的检查,确保在提交表单前数据的有效性和完整性,从而提高用户体验并...
在本教程中,我们将深入探讨如何使用Spring的Validator机制来实现一个具体的验证示例。 首先,我们需要理解Validator接口的用途。在Java Web开发中,我们经常需要确保用户输入的数据符合特定的格式或规则。例如,...
【标题】:“Hibernate、Spring和Struts工作原理及使用理由” 【内容】: Hibernate是一个流行的Java持久化框架,它的核心工作原理主要包括以下步骤: 1. **读取并解析配置文件**:Hibernate通过读取hibernate....
Spring Validation是Spring框架中的一种校验机制,用于验证JavaBean的属性是否符合JSR-303规范。该机制可以在应用程序中自动验证JavaBean的属性,从而确保数据的正确性和完整性。 在Spring Validation中,Validator...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2作为MVC架构的一部分,负责处理用户请求和展现视图;Spring作为一个全面的框架,提供依赖注入(DI)和面向切面编程(AOP)...
Spring Validator验证是Spring MVC框架中的一个关键特性,用于在服务器端对用户输入数据进行校验。在Spring MVC 3.0版本中,引入了注解驱动的验证方式,极大地简化了验证逻辑,使得开发者能够更加方便地处理表单数据...
从Spring 3.0开始,Spring引入了对JSR303(Bean Validation 1.0)的支持,这是一种标准的Java Bean验证框架。通过在字段上添加注解,如`@NotNull`, `@Size`, `@Min`, `@Max`等,开发者可以轻松地为对象属性定义验证...
本文的描述是 "今天小编就为大家分享一篇关于 Spring 自带的校验框架 Validation 的使用实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧",这说明了本文的内容是...