zoukankan      html  css  js  c++  java
  • @Valid Date 日期全局的格式化转换

    通过InitBinder注解,做到全局的格式化转换

    首先自定义一个格式转换类(我们以Date格式为例)DateFormatEditor继承自PropertiesEditor:

    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import org.springframework.beans.propertyeditors.PropertiesEditor;
     
    public class DateFormatEditor extends PropertiesEditor {
        // 日期是否允许为空
        private boolean isAllowEmpty;
        // 日期格式
        private String pattern;
     
        public DateFormatEditor() {
            super();
            this.isAllowEmpty = true;
            this.pattern = "yyyy-MM-dd";
        }
     
        public DateFormatEditor(String pattern, boolean isAllowEmpty) {
            super();
            this.isAllowEmpty = isAllowEmpty;
            this.pattern = pattern;
        }
     
        public boolean isAllowEmpty() {
            return isAllowEmpty;
        }
     
        public void setAllowEmpty(boolean isAllowEmpty) {
            this.isAllowEmpty = isAllowEmpty;
        }
     
        public String getPattern() {
            return pattern;
        }
     
        public void setPattern(String pattern) {
            this.pattern = pattern;
        }
     
        @Override
        public void setAsText(String text) throws IllegalArgumentException {
            try {
                if (text != null && !text.equals("")) {
                    SimpleDateFormat format = new SimpleDateFormat(pattern);
                    setValue(format.parse(text));
                } else {
                    if (isAllowEmpty) {
                        setValue(null);
                    }
                }
            } catch (ParseException e) {
                System.out.println("格式转换失败!");
                setValue(null);
            }
        }
    }

    定义完了还是不能用,这里需要我们注册:

    由于需要全局的格式化转换所以我们定义一个BaseController类:

    import java.util.Date;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.WebDataBinder;
    import org.springframework.web.bind.annotation.InitBinder;
    import spring.util.DateFormatEditor;
     
    @Controller
    public class BaseController {
        @Autowired
        protected HttpServletRequest request;
        @Autowired
        protected HttpServletResponse response;
        @Autowired
        protected HttpSession session;
        @Autowired
        protected ServletContext application;
     
        @InitBinder
        protected void initDate(WebDataBinder binder) {
            binder.registerCustomEditor(Date.class, new DateFormatEditor("yyyy-MM-dd hh:mm:ss", true));
        }
    }

     

    首先自定义一个格式转换类(我们以Date格式为例)DateFormatEditor继承自PropertiesEditor:

     

    1.  
      import java.text.ParseException;
    2.  
      import java.text.SimpleDateFormat;
    3.  
      import org.springframework.beans.propertyeditors.PropertiesEditor;
    4.  
       
    5.  
      public class DateFormatEditor extends PropertiesEditor {
    6.  
      // 日期是否允许为空
    7.  
      private boolean isAllowEmpty;
    8.  
      // 日期格式
    9.  
      private String pattern;
    10.  
       
    11.  
      public DateFormatEditor() {
    12.  
      super();
    13.  
      this.isAllowEmpty = true;
    14.  
      this.pattern = "yyyy-MM-dd";
    15.  
      }
    16.  
       
    17.  
      public DateFormatEditor(String pattern, boolean isAllowEmpty) {
    18.  
      super();
    19.  
      this.isAllowEmpty = isAllowEmpty;
    20.  
      this.pattern = pattern;
    21.  
      }
    22.  
       
    23.  
      public boolean isAllowEmpty() {
    24.  
      return isAllowEmpty;
    25.  
      }
    26.  
       
    27.  
      public void setAllowEmpty(boolean isAllowEmpty) {
    28.  
      this.isAllowEmpty = isAllowEmpty;
    29.  
      }
    30.  
       
    31.  
      public String getPattern() {
    32.  
      return pattern;
    33.  
      }
    34.  
       
    35.  
      public void setPattern(String pattern) {
    36.  
      this.pattern = pattern;
    37.  
      }
    38.  
       
    39.  
      @Override
    40.  
      public void setAsText(String text) throws IllegalArgumentException {
    41.  
      try {
    42.  
      if (text != null && !text.equals("")) {
    43.  
      SimpleDateFormat format = new SimpleDateFormat(pattern);
    44.  
      setValue(format.parse(text));
    45.  
      } else {
    46.  
      if (isAllowEmpty) {
    47.  
      setValue(null);
    48.  
      }
    49.  
      }
    50.  
      } catch (ParseException e) {
    51.  
      System.out.println("格式转换失败!");
    52.  
      setValue(null);
    53.  
      }
    54.  
      }
    55.  
      }

    定义完了还是不能用,这里需要我们注册:

    由于需要全局的格式化转换所以我们定义一个BaseController类:

     

    1.  
      import java.util.Date;
    2.  
      import javax.servlet.ServletContext;
    3.  
      import javax.servlet.http.HttpServletRequest;
    4.  
      import javax.servlet.http.HttpServletResponse;
    5.  
      import javax.servlet.http.HttpSession;
    6.  
      import org.springframework.beans.factory.annotation.Autowired;
    7.  
      import org.springframework.stereotype.Controller;
    8.  
      import org.springframework.web.bind.WebDataBinder;
    9.  
      import org.springframework.web.bind.annotation.InitBinder;
    10.  
      import spring.util.DateFormatEditor;
    11.  
       
    12.  
      @Controller
    13.  
      public class BaseController {
    14.  
      @Autowired
    15.  
      protected HttpServletRequest request;
    16.  
      @Autowired
    17.  
      protected HttpServletResponse response;
    18.  
      @Autowired
    19.  
      protected HttpSession session;
    20.  
      @Autowired
    21.  
      protected ServletContext application;
    22.  
       
    23.  
      @InitBinder
    24.  
      protected void initDate(WebDataBinder binder) {
    25.  
      binder.registerCustomEditor(Date.class, new DateFormatEditor("yyyy-MM-dd hh:mm:ss", true));
    26.  
      }
    27.  
      }

    这样就把所有Date类型的参数全部拦截下来进行判断和格式化。

  • 相关阅读:
    Net使用RdKafka引发异常RdKafka.Internal.LibRdKafka 的类型初始值设定项引发异常
    mysql数据与Hadoop之间导入导出之Sqoop实例
    如何将mysql数据导入Hadoop之Sqoop安装
    常见的几种Flume日志收集场景实战
    Restful服务应不应该在URI中加入版本号
    sudo
    shell实现SSH自动登陆
    使用465端口加密发邮件
    linux下c++如何输入不回显
    tmp
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/13452267.html
Copyright © 2011-2022 走看看