zoukankan      html  css  js  c++  java
  • JavaEE——SpringMVC(7)--数据转换 & 数据格式化 & 数据校验

    mvc:annotation-driven
    <mvc:annotation-driven /> 会自动注册

      RequestMappingHandlerMapping

      RequestMappingHandlerAdapter 

      ExceptionHandlerExceptionResolver 三个bean。
    • 还将提供以下支持:
      – 支持使用 ConversionService 实例对表单参数进行类型转换
      – 支持使用 @NumberFormat annotation、@DateTimeFormat注解完成数据类型的格式化
      – 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
      – 支持使用 @RequestBody 和 @ResponseBody 注解

    @InitBinder
    • 由 @InitBinder 标识的方法,可以对 WebDataBinder对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定
    • @InitBinder方法不能有返回值,它必须声明为void。
    • @InitBinder方法的参

    数通常是是 WebDataBinder

    数据格式化
    • 对属性对象的输入/输出进行格式化,从其本质上讲依然属于 “类型转换” 的范畴。
    • Spring 在格式化模块中定义了一个实现ConversionService 接口的FormattingConversionService 实现类,该实现类扩展了 GenericConversionService,因此它既具有类型转换的功能,又具有格式化的功能
    • FormattingConversionService 拥有一个FormattingConversionServiceFactroyBean 工厂类后者用于在 Spring 上下文中构造前者

    FormattingConversionServiceFactroyBean 内部已经注册了 :
      – NumberFormatAnnotationFormatterFactroy:支持对数字类型的属性使用 @NumberFormat 注解
      – JodaDateTimeFormatAnnotationFormatterFactroy:支持对日期类型的属性使用 @DateTimeFormat 注解

      日期格式化

      @DateTimeFormat 注解可对java.util.Date、java.util.Calendar、java.long.Long 时间类型进行标注:
        – pattern 属性:类型为字符串。指定解析/格式化字段数据的模式,如:”yyyy-MM-dd hh:mm:ss”
        – iso 属性:类型为 DateTimeFormat.ISO。指定解析/格式化字段数据的ISO模式,包括四种:ISO.NONE(不使用) -- 默认、ISO.DATE(yyyy-MM-dd) 、ISO.TIME(hh:mm:ss.SSSZ)、ISO.DATE_TIME(yyyy-MM-dd hh:mm:ss.SSSZ)
        – style 属性:字符串类型。通过样式指定日期时间的格式,由两位字符组成,第一位表示日期的格式,第二位表示时间的格式:S:短日期/时间格式、M:中日期/时间格式、L:长日期/时间格式、F:完整日期/时间格式、-:忽略日期或时间格式

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

     

      数值格式化
        @NumberFormat 可对类似数字类型的属性进行标注,它拥有两个互斥的属性:
          – style:类型为 NumberFormat.Style。用于指定样式类型,包括三种:Style.NUMBER(正常数字类型)、Style.CURRENCY(货币类型)、 Style.PERCENT(百分数类型)
          – pattern:类型为 String,自定义样式,如patter="#,###";

    @NumberFormat(pattern="#,###,###.#")
    private Float salary;
    

      

    数据校验

    JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 .
    • JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对 Bean进行验证

    Hibernate Validator 扩展注解
    • Hibernate Validator 是 JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解

     1).如何校验:

      ①. 使用 JSR 303 验证标准
      ②. 加入 hibernate validator 验证框架的 jar 包

      ③. 在 SpringMVC 配置文件中添加 <mvc:annotation-driven />
      ④. 需要在 bean 的属性上添加对应的注解

     

      ⑤. 在目标方法 bean 类型的前面添加 @Valid 注解

     

     2). 验证出错转向到哪一个页面 ?

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

    /*保存新添加的员工信息*/
        @RequestMapping(value="/emp", method = RequestMethod.POST)
        public String save(@Valid Employee employee, BindingResult bindingResult,
                           Map<String, Object> map) {
            System.out.println("add" + employee);
    
            if(bindingResult.getErrorCount() > 0){
                System.out.println("出错了");
    
                for(FieldError error: bindingResult.getFieldErrors()){
                    System.out.println(error.getField() + ": " + error.getDefaultMessage());
                }
    
                //若验证出错, 则转向定制的页面
                map.put("departments", departmentDao.getDepartments());
                return "input";
            }
    

      

     3). 在页面上显示错误
    • Spring MVC 除了会将表单/命令对象的校验结果保存到对应的 BindingResult 或 Errors 对象中外,还会将所有校验结果保存到 “隐含模型”
    • 即使处理方法的签名中没有对应于表单/命令对象的结果入参,校验结果也会保存在 “隐含对象” 中。
    • 隐含模型中的所有数据最终将通过 HttpServletRequest 的属性列表暴露给 JSP 视图对象,因此在 JSP 中可以获取错误信息
    • 在 JSP 页面上可通过 <form:errors path=“userName”>显示错误消息

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    分布式架构在农业银行的应用实践与展望
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/8384207.html
Copyright © 2011-2022 走看看