SpringMVC进行数据格式化以及数据校验

本文介绍Spring MVC中数据格式化与校验的方法,包括使用@NumberFormat和@DateFormat注解进行数字和日期格式化,以及利用JSR303标准注解如@NotNull、@Past进行数据校验,确保数据的合法性和正确性。
一. 数据格式化

数据格式也属于类型转换的范畴,Spring在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类,该实现了即有类型转换的功能,也有格式化的功能,这个实现了拥有一个工厂FormattingConversionServiceFactoryBean工厂类,该工厂类就是用于Spring中构造FormattingConversionService实现类的。该工厂类中已经在内部注册了:

  • @NumberFormat注解,用于进行数字类型的格式化
  • @DateFormat注解,用来进行日期类型的格式化

范例:Emp(员工实体类)中加入工资和生日属性,需要对工资和生日进行格式化

①:Emp中加入salary和birthday属性,并且制定格式化类型

@NumberFormat(pattern="#,###,###,###.#")
	private Double salary;
	
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;

②:配置

  <!-- 
	  mvc:annotation-driven : 是万能的注解驱动
	  	conversion-service : 配置SpringMVC上下文中中的类型转换器

   - 不配置:使用默认的
        - 配置:默认的+配置的
             -->
            <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
  <bean id="empConverter" class="com.wanbangee.util.EmpConverter"></bean>


  <!-- 配置ConversionFactoryBean 的 converters 属性 -->
  <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  	<property name="converters">
  		<set>
  			<ref bean="empConverter"/>
  		</set>
  	</property>
  </bean>

③:修改表单,进行测试

	<f:form modelAttribute="emp" method="post">
		<c:if test="${emp.empId != null}">  <!-- 修改 -->
			<f:hidden path="empId"/>
			<input type="hidden" name="_method" value="put">
		</c:if>
		<c:if test="${emp.empId == null}"> <!-- 新增 -->
			EMPNAME:<f:input path="empName"/>
			<br>
		</c:if>
		
	EMPMAIL:<f:input path="empMail"/>
	<br>
	EMPGENDER:<f:radiobuttons path="empGender" items="${genders}" /> 
	<br>
	DEPTNAME:<f:select path="deptId" items="${depts}" itemLabel="deptName" itemValue="deptId"></f:select>
	<br>
	SALARY:<f:input path="salary"/>
	<br>
	BIRTHDAY:<f:input path="birthday"/>
	<br>
	<f:button>Submit</f:button>

现在数据格式化是成功的,如果失败,我们知道,失败的信息都会绑定到BindingResult中,BindingResult对象可以作为处理器目标方法的入参。

@RequestMapping(value="emp",method=RequestMethod.POST)
	public String insertEmp(Emp emp,BindingResult result) {
		
	System.out.println(emp);
	//this.empManagerSerivce.insertEmp(emp);
	
	if(result.getErrorCount() > 0) { //如果错误数量大于0
		List<FieldError > errors = result.getFieldErrors();//获取所有的错误信息
		for (FieldError error : errors) {
			System.out.println(error.getField() +"-----"+error.getDefaultMessage());
		}
	}
	
	return "redirect:/emps";
}
二. 数据校验

JSR303是Java为bean数据合法性校验提供的标准的框架,已经包含在JavaEE6.0中,JSR303是通过在Bean的属性上面注解类似于@NULL,@NOTNULL,@MAX等标准的注解指定校验规则,并通过标准的接口对bean的属性进行验证,注解有:

序号注解说明
1@Null被注解的属性必须为NULL
2@NotNull被注解的属性必须不能为空
3@Past必须是一个过去的日期
4@Future必须是一个将来的日期
5@Pattern必须满足指定的正则规则
6@Max不能大于指定的最大值
7@Min不能小于指定的最小值

Hibernate Validator扩展注解,是JSR303的一个参考的实现,并且除了支持基本的校验注解外,还进行了扩展:

  • @Email:必须符合电子邮箱格式
  • @Length:字符串长度必须在指定范围内
  • @NotEmpty:必须非空
  • @Range:必须在指定的返回内

需要加入jar包:

classmate-0.8.0.jar

hibernate-validator-5.0.0.CR2.jar

hibernate-validator-annotation-processor-5.0.0.CR2.jar

jboss-logging-3.1.1.GA.jar

validation-api-1.1.0.CR1.jar

测试:

@NotEmpty
private String empName;
@Email
private String empMail;
private Integer empGender;
private Integer deptId;
private Dept dept;

@Range(1000,10000)
@NumberFormat(pattern="#,###,###,###.#")
private Double salary;

@Past
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date birthday;

前端处理器的请求目标方法:

	@RequestMapping(value="emp",method=RequestMethod.POST)
	public String insertEmp(@Valid Emp emp,BindingResult result) {	//@Valid用来数据校验
	
	if(result.getErrorCount() > 0) { //如果错误数量大于0
		List<FieldError > errors = result.getFieldErrors();//获取所有的错误信息
		for (FieldError error : errors) {
			System.out.println(error.getField() +"-----"+error.getDefaultMessage());
		}
	}
	
	return "redirect:/emps";
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值