zoukankan      html  css  js  c++  java
  • SpringMVC@InitBinder使用方法

    在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支持这个格式的转换,所以必须要手动配置, 自定义数据类型的绑定才能实现这个功能。

    比较简单的可以直接应用springMVC的注解@initbinder和spring自带的WebDataBinder类和操作。

    解决一种类型

    @InitBinder//默认
        public void resolveException(WebDataBinder webDataBinder) {
           //设置转换格式
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
           //参数一:转换格式      参数二:是否允许为空字符串
           webDataBinder.registerCustomEditor(Date.class,new CustomDateEditor(sdf,true));
        }
    
        @RequestMapping("/first")
        public String doFirst(String username, int age, Date birthday) throws Exception {
            //打印转换字符信息
            System.out.println(username);
            System.out.println(age);
            System.out.println(birthday);
            return "doSecond";
        }
    

    自定义属性编辑器

    创建类继承PropertiesEditor(属性编辑器)

    //自定义属性编辑器
    public class MultiController extends PropertiesEditor {
        //手动重写setAsTest方法
        @Override
        public void setAsText(String str) throws IllegalArgumentException {
            //匹配格式
            SimpleDateFormat sdf=getDateFormat(str);
            try {
                //转换Date类型
                Date parse = sdf.parse(str);
                setValue(parse);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        
    
        private SimpleDateFormat getDateFormat(String str){
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
            if(Pattern.matches("^\d{4}-\d{1,2}-\d{1,2}$",str)){
                sdf=new SimpleDateFormat("yyyy-MM-dd");
            }
            if(Pattern.matches("^\d{4}/\d{1,2}/\d{1,2}$",str)){
                sdf=new SimpleDateFormat("yyyy/MM/dd");
            }
            if(Pattern.matches("^\d{4}\d{1,2}\d{1,2}$",str)){
                sdf=new SimpleDateFormat("yyyyMMdd");
            }
            return sdf;
        }
    }
    

      

    处理器方法

    @InitBinder//默认
        public void resolveException(WebDataBinder webDataBinder) {
           //设置转换格式
           SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
           //参数一:转换格式      参数二:自定义属性编辑器
           webDataBinder.registerCustomEditor(Date.class,new MultiController());
        }
    
        @RequestMapping("/first")
        public String doFirst(String username, int age, Date birthday) throws Exception {
            //打印转换字符信息
            System.out.println(username);
            System.out.println(age);
            System.out.println(birthday);
            return "doSecond";
        }
    

      

      

  • 相关阅读:
    python基础之入门
    C#直接删除指定目录下的所有文件及文件夹(保留目录)
    删除Oracle文件、注册表
    WinRAR 激活码(KEY)
    用C#读取txt文件的方法(转)
    c# 生成 xml 文件
    Asp.Net 文件下载1——流下载(适用于大文件且防盗链)(转)
    Asp.Net异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值"的解决方法
    响应在此上下文中不可用 asp.net
    Ajax实现局部刷新
  • 原文地址:https://www.cnblogs.com/xuchangqi1/p/8683620.html
Copyright © 2011-2022 走看看