数据验证和JSR303

数据格式化

日期类:Employee.java添加birth字段,setter/getter并重写toString.在录入页面展现

输入abcccccccccccc看看

如何解决

标配<mvc:annotation-driven>
生日目标属性上添加注解并设定格式:@DateTimeFormat(pattern="yyyy-MM-dd")

数字类:@NumberFormat

字符格式数字串,试试1,234.8

400报错,参数不合适

原理:FormattingConversionServiceFactroyBean 

回顾我们的自定义转化器

 <mvc:annotation-driven conversion-service="conversionServiceFactoryBean"></mvc:annotation-
driven>
 
<bean id="conversionServiceFactoryBean" 
class="org.springframework.context.support.ConversionServiceFactoryBean">
   <property name="converters">
    <list>
      <ref bean="employeeConvert"/><!-- 注意小写类名首字母和名称 -->
    </list>
   </property>
 </bean>

转换+格式化

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
 <bean id="conversionService" 

    class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
   <property name="converters">
    <list>
      <ref bean="employeeConvert"/>
    </list>
   </property>
 </bean>

bindingResult添加出错信息

@RequestMapping(value="/emp",method=RequestMethod.POST)
 public String save(Employee employee,BindingResult bindingResult)
 {
   System.out.println(employee.toString());
   if(bindingResult != null && bindingResult.getFieldErrorCount()>0)
   {
    List<FieldError> fieldErrors = bindingResult.getFieldErrors();
    for (FieldError fieldError : fieldErrors)
    {
      System.out.println(fieldError.getField()+"\t"+fieldError.getDefaultMessage());
    }
    throw new RuntimeException("数据出错......");
   }
   employeeDao.save(employee);
   return "redirect:/emps";
 }

生日、薪水输入abc字符串试试

后台会打印对应出错提示

数据的校验提出的问题

how:添加注解

校验出问题了该转到那个提示页面?

如何将错误信息国际化并放在出错录入字段后面?

 

JSR303数据验证

环境搭建及演示

1. 添加符合HibernateValidator验证框架的jar包

2. 添加注解<mvc:annotation-driven></mvc:annotation-driven>会默认装配好一个 LocalValidatorFactoryBean

3. Employee.java中添加Field验证要求的相关注解,比如名字不为空、email格式要合法等

4. Save方法对应的POJO参数前面添加@Valid

public String save(@Valid Employee employee,BindingResult bindingResult

录入信息时,lastName不填写和email故意填错 

5. 需校验的 Bean对象和其绑定结果对象或错误对象时成对出现的,它们之间不允许声明其他的入参

6. 出错误后重新回到录入页面(Map带性别、部门参数信息)

@RequestMapping(value="/emp",method=RequestMethod.POST)
 public String save(@Valid Employee employee,BindingResult bindingResult,Map<String,Object> map)
 {
   if(bindingResult.getErrorCount()>0)
 {
 System.out.println("录入信息出错了......");
 List<FieldError> list = bindingResult.getFieldErrors();
    for (FieldError fieldError : list)
 {
  System.out.println(fieldError.getField()+"\t"+fieldError.getDefaultMessage());
   //出错后跳转回录入页面
  map.put("departments",departmentDao.getDepartments());
  map.put("genders", getGenderUtils());
      return "input";
 }
 }
 System.out.println(employee.toString());
   employeeDao.save(employee);
   return "redirect:/emps";
 }
显示:每个字段后面用
<form:errors path="XXX字段"></form:errors>

7. 对于使用tomcat6的同学提醒

页面上显示错误消息

显示:每个字段后面用<form:errors path="XXX字段"></form:errors>

定制

新建i18n.properties

注解名+类名+需要限制的field

NotEmpty.employee.lastName

Email.employee.email

配置国际化资源文件在springmvc相关配置文件里面

<!--国际化信息 配置  -->
 <bean id="messageSource" 
class="org.springframework.context.support.ResourceBundleMessageSource">
     <property name="basename" value="i18n"/><!-- 国际化信息所在的文件名 -->
 </bean>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值