【SpringMVC整合MyBatis】validation校验-商品修改校验

简介:
springmvc校验

1.校验理解

项目中,通常使用较多是前端的校验,比如页面中js校验。对于安全要求较高点建议在服务端进行校验。

服务端校验:
控制层controller:校验页面请求的参数的合法性。在服务端控制层controller校验,不区分客户端类型(浏览器、手机客户端、远程调用)
业务层service(使用较多):主要校验关键业务参数,仅限于service接口中使用的参数。
持久层dao:一般是不校验的。

2.springmvc校验需求

springmvc使用hibernate的校验框架validation(和hibernate没有任何关系)。

校验思路:
页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。
具体需求:
商品修改,添加校验(校验商品名称长度,生产日期的非空校验),如果校验出错,在商品修改页面显示错误信息。

3.环境准备
hibernate的校验框架validation所需要jar包:

 
4.配置校验器
在springmvc.xml配置文件中配置:
<!-- 校验器 -->
<bean id="validator"
	class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
	<!-- 校验器-->
	<property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
	<!-- 指定校验使用的资源文件,在文件中配置校验的错误信息,如果不指定则默认使用classpath下的ValidationMessages.properties -->	
        <property name="validationMessageSource" ref="messageSource" />
</bean>
<!-- 校验错误信息配置文件 -->
<bean id="messageSource"
	class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
	<!-- 资源文件名-->
	<property name="basenames">   
      	 <list>    
           <value>classpath:CustomValidationMessages</value> 
      	 </list>   
   	</property>
	<!-- 资源文件编码格式 -->
	<property name="fileEncodings" value="utf-8" />
	<!-- 对资源文件内容缓存时间,单位秒 -->
	<property name="cacheSeconds" value="120" />
</bean>

之后在工程的源文件夹config下创建CustomValidationMessages.properties配置文件,用来配置校验错误信息。

5.校验器注入到处理器适配器
<mvc:annotation-driven conversion-service="conversionService"
 validator="validator"></mvc:annotation-driven>

6.在pojo中添加校验规则
在ItemsCustom.java中添加校验规则:
public class Items {
	
    private Integer id;

    //校验名称在1到30个字符之间
    //message是提示校验出错显示的信息
    @Size(min=1,max=30,message="{items.name.length.error}")
    private String name;

    private Float price;

    private String pic;

    //非空的校验
    @NotNull(message="{items.createtime.isNULL}")
    private Date createtime;

    private String detail;
    //get和set方法省略
}


7.CustomValidationMessages.properties

在CustomValidationMessages.properties配置校验错误信息:
#添加校验错误提示信息
items.name.length.error=请输入1到30个字符的商品名称
items.createtime.isNULL=请输入商品的生产日期

8.捕获校验错误信息(@Validated与BindingResult)
//商品信息修改提交
//在需要校验的pojo前边加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息
//注意:@Validatedh和BindingResult bindingResult是配对出现,并且在形参中出现的顺序是固定的(一前一后)
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(HttpServletRequest request,Integer id,
		@Validated ItemsCustom itemsCustom,BindingResult bindingResult)throws Exception{
		
		//获取校验错误信息
		if(bindingResult.hasErrors()){
			//输出错误信息
			List<ObjectError> allErrors=bindingResult.getAllErrors();
			
			for(ObjectError objectError:allErrors){
				//输出错误信息
				System.out.println(objectError.getDefaultMessage());
			}
		}
		
		itemsService.updateItems(id, itemsCustom);
		
		//重定向到商品的查询列表
		return "redirect:queryItems.action";
	}

我们先测试输出错误看看,如果能正常输出错误,我们再去让它在页面中显示
访问主界面:

点击修改,如图


然后让生产日期为空,发现报错:


然后让名字大于30个字符,发现报错:


说明我们的校验配置成功!
下面我们让它在页面显示校验错误提示信息

9.在页面显示校验错误信息

在controller中将错误信息传到页面即可。
//获取校验错误信息
if(bindingResult.hasErrors()){
	//输出错误信息
	List<ObjectError> allErrors=bindingResult.getAllErrors();
	
	for(ObjectError objectError:allErrors){
		//输出错误信息
		System.out.println(objectError.getDefaultMessage());
	}
	
	//将错误传到页面
	model.addAttribute("allErrors",allErrors);
	//出错之后要跳转的页面
	return "items/editItems";
}

页面显示错误信息:
在商品编辑页面editItems.jsp中显示错误信息:
<!-- 显示错误信息 -->
<c:if test="${allErrors}!=null">
	<c:forEach items="${allErrors}" var="error">
	    <font color="red">${error.defaultMessage}</font><br/>
	</c:forEach>
</c:if>

然后再一次测试,不输入日期和输入长姓名,点击修改之后结果:

如图



转载请注明出处:http://blog.csdn.net/acmman/article/details/47441775

相关文章
|
14天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
3月前
|
JSON 前端开发 Java
spring mvc Rest风格
spring mvc Rest风格
32 0
|
1天前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
1月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
1月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
1月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
1月前
|
JSON 前端开发 Java
Spring MVC返回JSON数据
综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
94 4
|
1月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
83 3
|
1月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
83 2
|
2月前
|
前端开发 Java 应用服务中间件
我以为我对Spring MVC很了解,直到我遇到了...
所有人都知道Spring MVC是是开发的,却鲜有人知道Spring MVC的理论基础来自于1978 年提出MVC模式的一个老头子,他就是Trygve Mikkjel Heyerdahl Reenskaug,挪威计算机科学家,名誉教授。Trygve Reenskaug的MVC架构思想早期用于图形用户界面(GUI) 的软件设计,他对MVC是这样解释的。MVC 被认为是解决用户控制大型复杂数据集问题的通用解决方案。最困难的部分是为不同的架构组件想出好的名字。模型-视图-编辑器是第一个。
111 1
我以为我对Spring MVC很了解,直到我遇到了...