springMVC-自定义数据类型转换器
自定义类型转换器
201603005,今天想了一个问题,Spring中的Conventer是如何实现的,因为他没有绑定类中的属性,它怎么知道要将那个String转换?看了几遍的书也没有找到,后来想想,其实我已经知道了,他的名字就是答案,转换器,因为已经告诉他了目标类型,所以只要实体类中有这个类型,在使用springMVC表单对象时就会启动吧(这个结论是我猜的),但是另外一个问题产生了,如果项目中有多个地方那个有了时间,一个时间格式是yyyy-MM-dd,另一个是yyyy-MM-dd HH:mm:ss,那么此时该如果让Spring确定该用那个conventer呢(这个需求在我现在做的项目中就有这样)??
1.conversionService是Spring类型转换体系的核心借口
2.可以利用ConversionserviceFactoryBean在Spring的
IOC容器中定义一个ConversionService.
Spring将自动识别出IOC容器中的ConversionService,并在Bean
属性配置及SpringMVC处理方法入参绑定场合使用它进行数据的转换
3.可以通过ConversionServiceFactoryBean的ConversionServiceFactoryBean
的converters属性注册自定义的类型转换器
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<bean class="app07a.formatter.DateFormatter">
<constructor-arg type="java.lang.String" value="MM-dd-yyyy" />
</bean>
</set>
</property>
</bean>
在上一篇文章中也有这个conversionService,但是没有自定义错误消息,页面直接把错误代码直接显示在页面了.
在Spring中很多地方都用FactoryBean来整合第三方的框架的bean
Spring支持的转换器
Spring定义了3种类型的转换器借口,实现任意一个转换器接口都可以作为自定义转换器
注册到ConversionServiceFactoryBean
-Converter<S,T>:将s类型转换为T类型对象
-coverterFactory: 将相同系列多个"同质"converter封装在一起,如果希望将一种
类型的对象转换为另一种类型及其子类的对象(例如将String转换为Number以及Number
子类(Integer,Long,Double等)对象)可使用该转换器工厂类
-GenericConverter:会根据源类对象及目标对象所在的宿主类中的上下问信息进行类型转换
<mvc:annotation-driver conversionService = "conversionService"/>会将自定义的ConversionService注册到Spring MVC的上下文中
这个是一个简单的转换器
1页面
<form action="http://localhost:8080/springMVCapp07a/testConversionServiceConverter" method="post">
<!-- private String name;
private String description;
private Float price;
private Date productionDate; -->
<!--格式:java-javabase-12.0-2011.12.12 -->
product:<input type="text" name="product">
<input type="submit" value="submit"> </form>
转换器的类
@Component
public class ProcuctConverter implements Converter<String, Product>
{ @Override
public Product convert(String source)
{
if(source != null)
{
Product product = new Product();
//java-javabase-12.0-2011.12.12
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;
}
springmvc配置文件
<!--配置ConversionService -->
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="procuctConverter"/>
</set>
</property>
</bean>
记得要在annotation上加上这句
<mvc:annotation-driven conversion-service="conversionService" />
目标action
@Controller
public class testConversionService
{
@RequestMapping(value="/testConversionServiceConverter")
public String test(@RequestParam("product") Product product )
{
System.out.println("/testConversionServiceConverter"+product);
return "ProductForm";
}
}
现在再按照上篇博客的做法来找找咱们自己写的这个converter
ConversionService converters =
java.lang.Boolean -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@5844d84b
java.lang.Character -> java.lang.Number : org.springframework.core.convert.support.CharacterToNumberFactory@69367ae0
java.lang.Character -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@7857fecb
java.lang.Enum -> java.lang.String : org.springframework.core.convert.support.EnumToStringConverter@29f35b69
java.lang.Number -> java.lang.Character : org.springframework.core.convert.support.NumberToCharacterConverter@2a3022e3
java.lang.Number -> java.lang.Number : org.springframework.core.convert.support.NumberToNumberConverterFactory@3b1e1d56
java.lang.Number -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@7847604d
java.lang.String -> app07a.domain.Product : app07a.converters.ProcuctConverter@327961d9
java.lang.String -> java.lang.Boolean : org.springframework.core.convert.support.StringToBooleanConverter@1f22dcc2
java.lang.String -> java.lang.Character : org.springframework.core.convert.support.StringToCharacterConverter@3368b15d
java.lang.String -> java.lang.Enum : org.springframework.core.convert.support.StringToEnumConverterFactory@7348de9a
java.lang.String -> java.lang.Number : org.springframework.core.convert.support.StringToNumberConverterFactory@68874644
java.lang.String -> java.util.Locale : org.springframework.core.convert.support.StringToLocaleConverter@203e4659
java.lang.String -> java.util.Properties : org.springframework.core.convert.support.StringToPropertiesConverter@6b4fedc9
java.lang.String -> java.util.UUID : org.springframework.core.convert.support.StringToUUIDConverter@a0a5207
java.time.ZoneId -> java.util.TimeZone : org.springframework.core.convert.support.ZoneIdToTimeZoneConverter@3e4c9e1d
java.time.ZonedDateTime -> java.util.Calendar : org.springframework.core.convert.support.ZonedDateTimeToCalendarConverter@346cc261
java.util.Locale -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@5e465495
java.util.Properties -> java.lang.String : org.springframework.core.convert.support.PropertiesToStringConverter@5854cbda
java.util.UUID -> java.lang.String : org.springframework.core.convert.support.ObjectToStringConverter@66845d2f
org.springframework.core.convert.support.ArrayToArrayConverter@54072bf1
org.springframework.core.convert.support.ArrayToCollectionConverter@7231c593
org.springframework.core.convert.support.ArrayToObjectConverter@404beb79
org.springframework.core.convert.support.ArrayToStringConverter@4ef8c947
org.springframework.core.convert.support.ByteBufferConverter@5208841f
org.springframework.core.convert.support.ByteBufferConverter@5208841f
org.springframework.core.convert.support.CollectionToArrayConverter@c45da14
org.springframework.core.convert.support.CollectionToCollectionConverter@10ae797b
org.springframework.core.convert.support.CollectionToObjectConverter@8a04154
org.springframework.core.convert.support.CollectionToStringConverter@5df613f4
org.springframework.core.convert.support.FallbackObjectToStringConverter@25a8080b
org.springframework.core.convert.support.IdToEntityConverter@69f094c4,org.springframework.core.convert.support.ObjectToObjectConverter@7fcecd99
org.springframework.core.convert.support.MapToMapConverter@6c4f3ba0
org.springframework.core.convert.support.ObjectToArrayConverter@554c4aeb
org.springframework.core.convert.support.ObjectToCollectionConverter@3f0c59b9
org.springframework.core.convert.support.StringToArrayConverter@234d2bca
org.springframework.core.convert.support.StringToCollectionConverter@17af60fb
Spring自带的转换器都在,红色标记的就是自己写的
springMVC-自定义数据类型转换器的更多相关文章
- SpringMVC框架——自定义数据类型转换器
Spring MVC 框架的 Converter<S,T> 是一个可以将一种数据类型转换成另一种数据类型的接口,这里 S 表示源类型,T 表示目标类型. 开发中如果需要自定义数据类型转换时 ...
- SpringMVC自定义类型转换器
SpringMVC 自定义类型转换器 我们在使用SpringMVC时,常常需要把表单中的参数映射到我们对象的属性中,我们可以在默认的spring-servlet.xml加上如下的配置即可做到普通数据 ...
- 《SpringMVC从入门到放肆》十二、SpringMVC自定义类型转换器
之前的教程,我们都已经学会了如何使用Spring MVC来进行开发,掌握了基本的开发方法,返回不同类型的结果也有了一定的了解,包括返回ModelAndView.返回List.Map等等,这里就包含了传 ...
- SpringMVC自定义日期转换器
一.创建自定义日期转换器类 1 public class StringToDateConverter implements Converter<String,Date> { 2 @Over ...
- springmvc——自定义类型转换器
一.什么是springmvc类型转换器? 在我们的ssm框架中,前端传递过来的参数都是字符串,在controller层接收参数的时候springmvc能够帮我们将大部分字符串类型的参数自动转换为我们指 ...
- SpringMVC 自定义类型转换器
先准备一个JavaBean(Employee) 一个Handler(SpringMVCTest) 一个converters(EmployeeConverter) 要实现的输入一个字符串转换成一个emp ...
- SpringMVC 自定义全局日期转换器
第一步: 编写自定义转换器的类 /* * 自定义日期转换器 */ public class CustomDateConverter implements Converter<String, Da ...
- SpringMVC自定义配置消息转换器踩坑总结
问题描述 最近在开发时候碰到一个问题,springmvc页面向后台传数据的时候,通常我是这样处理的,在前台把数据打成一个json,在后台接口中使用@requestbody定义一个对象来接收,但是这次数 ...
- springmvc 类型转换器 自定义类型转换器
自定义类型转换器的步骤: 1.定义类型转换器 2.类型转换器的注册(在springmvc配置文件处理) 来解决多种日期格式的问题: springmvc 类型转换器 表单数据填错后返回表单页面(接上面的 ...
- springmvc:自定义类型转换器代码编写
字符串转换日期: 1.自定义一个类 /** * 字符串转换日期 */ public class StringToDateConverter implements Converter<String ...
随机推荐
- 036医疗项目-模块三:药品供应商目录模块——供货商药品目录(批量)添加药品的功能---------Action层
这篇文章我们来讲Action层: 我们先讲开发步骤: 1:我们要根据Service层里面要传的参数,在Action层传入对应的参数. Service层是:public void insertGysym ...
- DEDECMS之九 文章采集
到很多网友都为织梦(DEDECMS)的采集教程头疼,的确,官方出的教程太笼统了,什么都没说,换个网站你什么都做不了,这个教程是最详尽的教程,让你一看即会! 一.列表采集 第一步.我们打开织梦后台点击采 ...
- css默认值汇总
原文:http://www.cnblogs.com/xiangzi888/archive/2011/10/12/2209514.html HTML标签CSS属性默认值汇总 这个东西,在你需要还原默认值 ...
- Codevs 1860 最大数 string大法好,STL万岁。。
题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 输入描述 Input Description 第一行一个正整数n. 第二行n个正整数,空格隔开 ...
- MongoDB JAVA API Filters
Filters 该过滤器类为所有的MongoDB的查询操作静态工厂方法.每个方法返回BSON类型,又可以传递给期望一个查询过滤器的任何方法的一个实例. eq:匹配等于指定值的值.gt:匹配大于指定值的 ...
- mybatis 3.2.8 + log4j2.0.2 控制台输出sql语句
mybatis3.2.7有一个bug,使用log4j2 (2.0.2)版本时,会找不到类 ,导致启动失败,详见 https://github.com/mybatis/mybatis-3/issues/ ...
- 两个Canvas小游戏
或许连小游戏都算不上,可以叫做mini游戏. 没有任何框架或者稍微有点深度的东西,所以有js基础的或者要追求炫酷效果的可以直接ctrl+w了. 先贴出两个游戏的试玩地址: 是男人就走30步 是男人就忍 ...
- JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)
相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑话说前面哦,这篇文章应该能让各位彻底理解标记/清除算法,不过倘若各位猿友不能在五分钟内 ...
- .Net简单图片系统-本地存储和分布式存储
本地存储 所谓本地存储就是将上传图片保存到图片服务器的本地磁盘上. if (ConfigHelper.GetConfigString("SaveMode") == "Lo ...
- c#类库和可移值类库的区别
所谓类库,只能指定一个类库的可运行平台. 而可移值类库,可以在无需修改代码的情况,同时可以在多平台上运行DLL文件.多平台如NET Framework.Silverlight.Windows Phon ...