博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC学习笔记五:使用converter进行参数数据转换
阅读量:2197 次
发布时间:2019-05-02

本文共 2506 字,大约阅读时间需要 8 分钟。

转载请注明原文地址: 

 一:SpringMVC数据绑定机制

   1:request到达SpringMVC框架时,框架会把request对象以及其映射的处理函数的参数实例,传递给 DataBinder;

   2:DataBinder调用ConversionService组件,对request对象传过来的参数进行数据类型转换、数据格式化操作,然后把数据绑定到处理函数的参数实例

   3:然后调用Validator组件对绑定了值的参数对象进行数据校验,并生成数据绑定结果BindingResult。

   4:SpringMVC抽取BindingResult中的函数参数对象以及校验结果对象,赋值给请求处理函数的相应参数。

 

二:数据转换

    可以在SpringMVC的配置文件中,通过 org.springframework.context.support.ConversionServiceFactoryBean注册一个conversionService。SpringMVC在request对象中绑定的参数时,就会使用这个conversionService进行数据转换。

    ConversionServiceFactoryBean默认内置了许多转换器,可以完成一般的数据类型转换,如:String类型参数转换为各种基本数据类型、包装类、Array、集合类等。

    但是,稍微复杂的转换就不行了,比如:日期格式的字符串要求转换为Date类型,以及其他开发者自定义的格式的数据的转换。这个时候,可以自定义数据转换器,并注册到Spring中即可。

 

三:自定义数据转换器

    实现Converter<S,T>接口:把S类型数据转换为T类型。

    类中实现接口的唯一方法 convert(S sourse),该方法负责request参数中S类型对象的数据传进来,进行格式判断后,转换为T类型对象并返回。

public class ProcuctConverter implements  Converter
//把字符串提取,封装成为一个bean对象{ public Product convert(String source) { if(source != null) { Product product = new Product(); String[] values = source.split("-"); if(values != null && values.length==4) { product.setName(values[0]); product.setDescription(values[1]); product.setPrice(Float.parseFloat(values[2])); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); product.setProductionDate(new Date()); System.out.println(source + "--converter"+product); return product; } } return null; }}

 

四:注册自定义数据转换器

    有两种方式:

    1:在springMVC配置文件中配置:

//注册自定义类型转换器到ConversionServiceFactoryBean的属性中
//装配自定义类型转换器

 

    2:如果希望在全局范围内(即:所以controller类都有效)使用自定义转换器,可以实现WebBindingInitializer接口,在实现类中实现initBinder方法把自定义类型转换器注册到全局范围。然后在springMVC配置文件中配置全局自定义转换器即可。

public class MyWebBindingInitializer implements WebBindingInitializer {       public void initBinder(WebDataBinder binder, WebRequest request) {          binder.registerCustomEditor(转换结果类型.class,new 自定义转换器(参数值));      }   }
//配置自定义的全局转换器

当使用了<mvc:annotation-driven />的时候,它会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean。

这时候第二种方式指定的全局属性编辑器就不会起作用了,解决办法是:手动的添加上面的配置,并把它们加在<mvc:annotation-driven/>的前面

如果不生效,则将手动注册AnnotationMethodHandlerAdapter改为手动注册RequestMappingHandlerAdapter

 

转载于:https://www.cnblogs.com/ygj0930/p/6832898.html

你可能感兴趣的文章
(PAT 1061) Dating (字符串处理)
查看>>
(PAT 1118) Birds in Forest (并查集)
查看>>
数据结构 拓扑排序
查看>>
(PAT 1040) Longest Symmetric String (DP-最长回文子串)
查看>>
(PAT 1145) Hashing - Average Search Time (哈希表冲突处理)
查看>>
(1129) Recommendation System 排序
查看>>
PAT1090 Highest Price in Supply Chain 树DFS
查看>>
(PAT 1096) Consecutive Factors (质因子分解)
查看>>
(PAT 1019) General Palindromic Number (进制转换)
查看>>
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>
mininet+floodlight搭建sdn环境并创建简答topo
查看>>
【linux】nohup和&的作用
查看>>
Set、WeakSet、Map以及WeakMap结构基本知识点
查看>>
【NLP学习笔记】(一)Gensim基本使用方法
查看>>
【NLP学习笔记】(二)gensim使用之Topics and Transformations
查看>>
【深度学习】LSTM的架构及公式
查看>>
【python】re模块常用方法
查看>>
剑指offer 19.二叉树的镜像
查看>>