zoukankan      html  css  js  c++  java
  • springmvc 接受特殊类型字段的处理方法

    springmvc接受前台传入的数据时如果该字段类型无法被封装(如Date),则会出现400 Bad Request错误,解决方法如下。

    1.在需要处理的字段前加上注解:

    @DateTimeFormat( pattern = "yyyy-MM-dd" )

    然后在项目中引入joda-time.jar包,最后在在 SpringMVC 配置 xml 文件中中加入配置: <mvc:annotation-driven /> 。这一句配置是一种简写,其实是给 spring 容 器中注入了两个 Bena ,分别是: DefaultAnnotationHandlerMapping 和 AnnotationMethodHandlerAdapter 。 @DateTimeFormat 注解的内部同样需要使用到前面注入的两 个 bean 去处理,所以缺少这个配置, Spring 容器中没有对应的 bean 去处理注解同样也会报错。至此,所有的步骤都完成了,可以跑了。、

    2.使用springmvc提供的@InitBinder标签:

    在控制层中加入一个编辑器

        /**
         * 设置控制层特殊字段转换规则(如 Date),可重载
         * @param binder
         */
        @InitBinder 
        protected void initBinder(WebDataBinder binder) {  
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
            dateFormat.setLenient(false);  
            binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
        }

    spring提供了大量的实现类,诸如CustomDateEditor ,CustomBooleanEditor,CustomNumberEditor等

        @InitBinder    
           protected void initBinder(WebDataBinder binder) {    
               binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));    
        /        binder.registerCustomEditor(int.class, new CustomNumberEditor(int.class, true));    
               binder.registerCustomEditor(int.class, new IntegerEditor());    
        /        binder.registerCustomEditor(long.class, new CustomNumberEditor(long.class, true));  
               binder.registerCustomEditor(long.class, new LongEditor());    
               binder.registerCustomEditor(double.class, new DoubleEditor());    
               binder.registerCustomEditor(float.class, new FloatEditor());    
           }   

    也可以不使用自带这些编辑器类,通过继承PropertiesEditor实现自定义编辑类

    import org.springframework.beans.propertyeditors.PropertiesEditor;
    
    public class DoubleEditor extends PropertiesEditor {  
        @Override  
        public void setAsText(String text) throws IllegalArgumentException {  
            if (text == null || text.equals("")) {  
                text = "0";  
            }  
            setValue(Double.parseDouble(text));  
        }  
      
        @Override  
        public String getAsText() {  
            return getValue().toString();  
        }  
    } 
    import org.springframework.beans.propertyeditors.PropertiesEditor;
    
    public class IntegerEditor extends PropertiesEditor {  
        @Override  
        public void setAsText(String text) throws IllegalArgumentException {  
            if (text == null || text.equals("")) {  
                text = "0";  
            }  
            setValue(Integer.parseInt(text));  
        }  
      
        @Override  
        public String getAsText() {  
            return getValue().toString();  
        }  
    } 
    import org.springframework.beans.propertyeditors.PropertiesEditor;
    
    public class FloatEditor extends PropertiesEditor {  
        @Override  
        public void setAsText(String text) throws IllegalArgumentException {  
            if (text == null || text.equals("")) {  
                text = "0";  
            }  
            setValue(Float.parseFloat(text));  
        }  
      
        @Override  
        public String getAsText() {  
            return getValue().toString();  
        }  
    }  
    import org.springframework.beans.propertyeditors.PropertiesEditor;
    
    public class LongEditor extends PropertiesEditor {  
        @Override  
        public void setAsText(String text) throws IllegalArgumentException {  
            if (text == null || text.equals("")) {  
                text = "0";  
            }  
            setValue(Long.parseLong(text));  
        }  
      
        @Override  
        public String getAsText() {  
            return getValue().toString();  
        }  
    }  

    3:配置全局日期转换器。

     http://blog.csdn.net/chenleixing/article/details/45156617

  • 相关阅读:
    Elasticsearch(ES) 创建索引
    Elasticsearch(ES) 下载&安装
    一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)
    Spring Boot 2.0 快速集成整合消息中间件 Kafka
    一文教您如何通过 Docker 搭建反向代理 Ngnix,并配置 Https SSL 证书
    Django开发文档-域用户集成登录
    Python实现按键精灵(二)-找图找色
    Python学习笔记-SQLSERVER的大批量导入以及日常操作(比executemany快3倍)
    Python爬虫案例-获取最新的中国行政区域划分
    PostgreSQL自动更新序列sequence
  • 原文地址:https://www.cnblogs.com/chreless2/p/5553833.html
Copyright © 2011-2022 走看看