欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-15 23:41:17
一. 数据格式化数据格式也属于类型转换的范畴,Spring在格式化模块中定义了一个实现ConversionService接口的FormattingConversionService实现类,该实现了即有类型转换的功能,也有格式化的功能,这个实现了拥有一个工厂FormattingConversionServiceFactoryBean工厂类,该工厂类就是用于Spring中构造FormattingConversionService实现类的。该工厂类中已经在内部注册了:@NumberFormat注解,用于进行...

一. 数据格式化

数据格式也属于类型转换的范畴,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";
}

本文地址:https://blog.csdn.net/codeliang20/article/details/107369599