SpringMVC:数据校验

1.数据校验:

对于一些很重要的数据,如果只是做前端校验是不安全的,必须要加上后端的校验。

在后端的校验方法:

1.可以写程序将每一个数据取出进行校验,如果失败直接来到添加页面,提示重新填写。(不推荐)

2.SpringMVC:可以JSR-303(Java Specification Requests的第303条规范)来做数据校验

             JSR303:规范 ------- 实现:Hibernate Validator(第三方校验框架)

3.如何快速的进行后端校验:

              1)、导入校验框架的jar包:

                        hibernate-validator-6.0.16.Final.jar
                                   hibernate-validator-annotation-processor-6.0.16.Final.jar
                                   validation-api-2.0.1.Final.jar
                                   jboss-logging-3.3.2.Final.jar
                                   classmate-1.3.4.jar

              2)、给JavaBean的属性添加上校验注解

              3)、在SpringMVC封装对象的时候,告诉SpringMVC这个JavaBean需要校验

              4)、如何知道校验结果

                       给需要校验的JavaBean后面紧跟一个BindingResult,BindingResult是封装前一个JavaBean的校验结果。

                       注意:BindingResult必须紧跟在需要校验的JavaBean后面。

                     

                         5)、根据校验结果来决定怎么办。

代码实现:

Controller的添加员工方法

	/**
	 * 保存员工
	 * 
	 * @param employee
	 * @return
	 */
	@RequestMapping(value = "/emp",method = RequestMethod.POST)
	public String addEmpl(@Valid Employee employee, BindingResult result) {
		System.out.println(employee);
		if (result.hasErrors()) {
			return "add";
		} else {
			employeeservice.addEmpl(employee);
			return "redirect:/emps";
		}
	}

 Employee类

package cn.it.bean;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;

import org.hibernate.validator.constraints.Length;

public class Employee {
	private Integer id;

	/**
	 * @NotEmpty:不能为空
	 * 
	 * @Length(min = 5, max = 18):字符串长度最大最小值
	 */
	@NotEmpty
	@Length(min = 5, max = 18)
	private String lastName;

	@Email
	private String email;

	private Integer gender;

	private Integer departmentid;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Integer getGender() {
		return gender;
	}

	public void setGender(Integer gender) {
		this.gender = gender;
	}

	public Integer getDepartmentid() {
		return departmentid;
	}

	public void setDepartmentid(Integer departmentid) {
		this.departmentid = departmentid;
	}

	@Override
	public String toString() {
		return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender
				+ ", departmentid=" + departmentid + "]";
	}

	public Employee(Integer id, String lastName, String email, Integer gender, Integer departmentid) {
		super();
		this.id = id;
		this.lastName = lastName;
		this.email = email;
		this.gender = gender;
		this.departmentid = departmentid;
	}

	public Employee() {
		super();
		// TODO Auto-generated constructor stub
	}

}

结果 

后台打印


2.自定义国际化错误消息

1.编写自己的国际化文件

errors_zh_CN.prpoerties

errors_en_US.properties

类容key=value,这个key有要求:

每一个字段发生错误后,都会有一个错误代码,所有国际化文件中的错误消息的key必须对应一个错误代码

以@Email举例,有四种错误代码

codes

[

Email.employee.email---------解释:校验规则.隐含模型中对象的key.对象的属性

Email.email-----------------------解释:校验规则.属性

Email.java.lang.String---------解释:校验规则.属性类型

Email-------------------------------解释:校验规则

]

1.Email.employee.email:隐含模型中的employee对象的email属性发生了@Email校验错误,就会生成Email.employee.email错误代码。

2.Email.email:只要是email属性发生了@Email校验错误,就会生成Email.email错误代码。

3.Email.java.lang.String:只要是String类型发生了@Email校验错误,就会生成Email.java.lang.String错误代码。

4.Email:只要发生了@Email校验错误,就会生成Email错误代码。

errors_zh_CN.prpoerties

errors_en_US.properties

小细节:如果一个资源文件中出现2个能同时匹配到的key,那么精确的优先。

2.让SpringMVC管理国际化资源文件

​
	 <!-- 让springmvc管理国际化资源文件 
		配置一个资源文件管理器 ResourceBundleMessageSource
		
		id="messageSource"必须是messageSource
	-->
	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<!-- basename:指定基础名  -->
		<property name="basename" value="errors"></property>
	</bean>

​

 

3.来到页面取值

中文:

英文:

4.高级国际化

动态获取消息参数:

{0}永远都是当前的属性名

{1}、{2}...才是参数(不是按参数写的顺序,而是按参数名的字母的顺序)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值