SpringMVC总结--数据格式转换和数据校验

SpringMVC数据绑定流程
       A:SpingMVC 主框架将 ServletRequest 对象及目标方法的入参实例传递 WebDataBinderFactory 实例,以创建DataBinder 实例对象
       B:DataBinder 调用装配在 SpringMVC 上下文中的ConversionService 组件进行 数据类型转换、数据格式工作,将Servlet 中的请求信息填充到入参对象中
       C:调用Validator 组件对已经绑定了请求消息的入参对象进行数据合法性校验,并最终生成数据绑定结果 BindingData 对象
       D:SpringMVC 抽取 BindingResult 中的入参对象和校验错误对象,将他们赋给处理方法的响应入参

一、数据转换

1、加入jar包:joda-time-2.1.jar

2、实体使用,@DateTimeFormat(pattern="yyyy-MM-dd")和@NumberFormat(pattern="#,###,###.#")进行数据转换,其他注解下面数据验证是会说明

public class Employee {
    private Integer id;
	@NotEmpty
	private String lastName;
	@Email
	private String email;
	private int gender;
	private Department department;
	
	@Past
	@DateTimeFormat(pattern="yyyy-MM")
	private Date birth;
	
	@NumberFormat(pattern="#,###,###.#")
	private double num;
}

3、配置文件中配置 <mvc:annotation-driven ></mvc:annotation-driven>

4、Controller的使用

/**
	 * 数据转换测试方法
	 * @param map
	 * @return
	 */
	@RequestMapping(value = "/test", method = RequestMethod.GET)
	public String test(Model model){
		Employee employee = new Employee();
		employee.setId(1);
		employee.setBirth(new Date());
		employee.setNum(100000d);
		model.addAttribute("employee", employee);
		return "test";
	}

5、jsp,使用form标签

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <body>
    
    <form:form action="emp" method="post" modelAttribute="employee">
        
         Birth: <form:input path="birth"/>
         <br/> 
         Num: <form:input path="num"/> 
         <br/> 
         
         <input type="submit" value="Submit"/>
     </form:form>
    
  </body>

6、结果:显示的数据会根据实体上@DateTimeFormat(pattern="yyyy-MM-dd")和@NumberFormat(pattern="#,###,###.#")格式显示数据

二、数据校验

1、如何进行数据验证 
         a:根据JSR 303进行验证:JSR 303 是Java 为Bean 数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中了
         b:Spring4.0 拥有自己独立的数据校验框架,同时支持JSR 303
         c:在Spring 需要配置LocalValidatorFactoryBean(即配置<mvc:annotation-driven />)

2、需要 的jar包(hibernate validator 验证框架的jar包)

   hibernate-validator-5.0.0.CR2.jar

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

3.、实体

   使用还是使用上面数据转换的实体,使用@NotEmpty,@Email,@Past,@DateTimeFormat注解进行验证,其中验证的注解还有很多,感兴趣的可以百度一波,这边不做太多说明了

@NotEmpty 不为空,@Email验证邮箱,@Past验证时间是否比当前早,@DateTimeFormat验证时间格式

4、加上<mvc:annotation-driven />配置

5、jsp,使用form标签,验证不通过的错误信息使用form:errors进行输出

<form:form action="emp" method="post" modelAttribute="employee">
          <form:errors path="*"></form:errors><br/>
         <c:if test="${employee.id == null }">
              LastName: <form:input path="lastName"/>
               <form:errors path="lastName"></form:errors>
         </c:if>
         <c:if test="${employee.id != null }">
             <form:hidden path="id"/>
             <!-- 对于_method 不能使用form:hidden 标签,因为  modelAttribute 对应的bean 中没有_method 这个属性,会出错-->
             <input type="hidden" name="_method" value="PUT"/>
         </c:if>
         <br/>
         Email: <form:input path="email"/>
          <form:errors path="email"></form:errors>
         <br/>
         
         
         Geder: <form:radiobuttons path="gender" items="${geders }" /> 
         <br/>                            
         Department: <form:select path="department.id" items="${depatrtments }" itemValue="id" itemLabel="departmentName"></form:select>
         <br/>
         Birth: <form:input path="birth"/>
         <form:errors path="birth"></form:errors>
         <br/> 
         Num: <form:input path="num"/> 
         <br/> 
         
         <input type="submit" value="Submit"/>
     </form:form>

 6、form提交的Controller,在目标bean 前加上@Valid 注解

@RequestMapping(value = "/emp", method = RequestMethod.POST)
	public String save(@Valid Employee employee,BindingResult result, Map<String, Object> map){
		//System.out.println(employee);
		if(result.getErrorCount() > 0){
			for(FieldError error : result.getFieldErrors()){
				System.out.println(error.getCode()+ " : "+error.getDefaultMessage());
			}
			map.put("depatrtments", departmentDao.getAll());
			return "input";
		}
		
		emploeeDao.save(employee);
		return "redirect:/empList";
	}

7、效果图

注:需校验的 Bean 对象和其绑定结果对象或错误对象成对出现的,他们之间不允许声明其他的入参
       在使用JSR 303 框架时,有可能会与tomacat下的jar冲突,需要删除tomacat下的与el相关的包,然后加入JSR 303的与el相关的jar包

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值