SpringMvc服务器端数据校验

1.为什么需要服务端校验?
最早的校验,就是服务端校验。早期的网站,用户输入一个邮箱地址,校验邮箱地址需要将地址发送到服务端,服务端进行校验,校验成功后,给前端一个响应。有了JavaScript,校验工作可以放在前端去执行。那么为什么还需要服务端校验呢? 因为前端传来的数据不可信。前端很容易获取都后端的数据接口,如果有人绕过页面,就会出现非法数据,所以服务端也要数据校验,总的来说:

1.前端校验要做,目的是为了提高用户体验

 2.后端校验也要做,目的是为了数据安全
2.普通校验

Springmvc本身没有校验功能,它使用hibernate的校验框架,hibernate的校验框架和orm没有关系

2.1.引入相关jar包

spring validate 校验两个参数要么同时为空 要么同时不为空_服务端

2.2创建properties文件

属性文件用来声明错误提示信息

spring validate 校验两个参数要么同时为空 要么同时不为空_mvc_02

2.3在springmvc的配置文件中配置如下
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
	<context:component-scan base-package="cn.springmvc.controller"></context:component-scan>
	
	<!--添加对JSR-303验证框架的支持  -->
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>
        <!--不设置则默认为classpath下的 ValidationMessages.properties -->
        <property name="validationMessageSource" ref="validatemessageSource"/>
    </bean>
   
    <bean id="validatemessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">  
        <property name="basename" value="classpath:ValidateMessages"/>  
        <property name="fileEncodings" value="utf-8"/>  
        <property name="cacheSeconds" value="120"/>  
    </bean>	
</beans>
2.4Bean对象中配置校验规则

spring validate 校验两个参数要么同时为空 要么同时不为空_spring_03

spring validate 校验两个参数要么同时为空 要么同时不为空_服务端_04

2.5Controller中校验

spring validate 校验两个参数要么同时为空 要么同时不为空_mvc_05

2.6jsp页面中获取错误信息

spring validate 校验两个参数要么同时为空 要么同时不为空_服务端_06

3.分组校验

为什么需要分组校验?
因为一个对象有多个属性,而不同的controller校验的需求是不一样的,必须c1只需要校验对象的账号是否为空就可以了,而c2不光要校验账号为空还需要校验手机号必须不能为空,这时分组校验就能解决这个问题了。实现步骤如下:

3.1定义分组

spring validate 校验两个参数要么同时为空 要么同时不为空_spring_07

3.2使用分组

spring validate 校验两个参数要么同时为空 要么同时不为空_spring_08

3.3controller中使用

spring validate 校验两个参数要么同时为空 要么同时不为空_服务端_09