Spring MVC框架的数据验证

本文介绍了Spring MVC中数据验证的重要性及其实现方式,包括客户端验证主要通过JavaScript进行,而服务器端验证作为防止非法数据的最后防线。在Spring MVC框架内,服务器端验证通常在类型转换后由验证器介入。文章详细阐述了从编写Model类、验证器类到配置文件的整个流程,以及如何创建显示页面和测试应用。
摘要由CSDN通过智能技术生成

用户的输入一般是随意的,为了保证数据的合法性,数据验证是所有Web应用必须处理的问题。在Spring MVC框架中有两种方法可以验证输入数据,一种是利用Spring自带的验证框架,另一种是利用JSR 303实现。在这里只介绍Spring的验证体系的使用。
数据验证分为客户端验证和服务端验证,客户端验证主要是过滤正常用户的误操作,通过JavaScript代码完成;服务器端是整个应用阻止非法数据的最后防线,通过在应用中编程实现。

客户端验证

在大多数情况下,使用JavaScript进行客户端验证的步骤如下:
(1)编写验证函数。
(2)在提交表单的事件中调用验证函数。
(3)根据验证函数来判断是否进行表单提交。

客户端验证可以过滤用户的误操作,是第一道防线,一般使用JavaScript代码实现。但仅用客户端验证是不够的,攻击者还可以绕过客户端验证直接进行非法输入,这样可能会引起系统异常,为了确保数据的合法性,防止用户通过非正常手段提交错误信息,必须加上服务器验证。

服务器端验证

SpringMVC的Converter和Formatter在进行类型转换时是将输入数据转换为邻域对象的属性值(一种Java类型),一旦成功,服务器端验证器就好介入。也就是说,在SpringMVC框架中先进行数据类型转换,再进行服务器端验证。

使用Spring验证器的步骤:
web-project项目目录:
在这里插入图片描述
1,编写Model类

public class Goods {

	private String gname;
	private String gdescription;
	private double gprice;
	//日期格式化(需要在配置文件中配置FormattingConversionServiceFactoryBean
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date gdate;
	//省略setter和getter方法

2,编写验证器类

@Component
public class GoodValidator implements Validator{

	@Override
	public boolean supports(Class<?> klass) {
		//要验证的model,返回值为false则不验证
		return Goods.class.isAssignableFrom(klass);
	}

	@Override
	public void validate(Object object, Errors errors) {
		Goods goods = (Goods) object;//object要验证的对象
		//goods.gname.required 是错误消息属性文件中的编码(国际化后对应的是国际化的信息
		ValidationUtils.rejectIfEmpty(errors,"gname","goods.gname.required");
		ValidationUtils.rejectIfEmpty(errors, "gdescription", "goods.gdescription.required");
		if(goods.getGprice() > 100 || goods.getGprice() < 0){
			errors.rejectValue("gprice", "gprice.invalid");
		}
		Date goodsDate = goods.getGdate();
		//在系统时间之后
		if(goodsDate != null && goodsDate.after(new Date())){
			errors.rejectValue("gdate", "gdate.invalid");
		}
		
	}
	
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值