Spring 自定义属性编辑(CustomEditorConfigurer)和类型转换器(ConversionServiceFactoryBean)一起配置问题
来源:互联网 发布:淘宝买家等级哪里看 编辑:程序博客网 时间:2024/04/28 04:07
问题:
现在这样一种需求, 有一个bean它的属性是java.util.Date类型,我们要在spring的xml配置初始化它,怎么做呢
解决方案:
方法1:
添加属性编辑器:
<!-- 日期属性编辑 --><bean id="customEditorConfigurer"class="org.springframework.beans.factory.config.CustomEditorConfigurer"><property name="customEditors"><map><entry key="java.util.Date"><bean class="com.UtilDatePropertyEditor"><property name="formate" value="yyyy-MM-dd HH:mm:ss"></property></bean></entry></map></property></bean>
java:
import java.beans.PropertyEditorSupport;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class UtilDatePropertyEditor extends PropertyEditorSupport {private String formate;@Overridepublic void setAsText(String text) throws IllegalArgumentException {SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formate);try {Date date = simpleDateFormat.parse(text);this.setValue(date);} catch (ParseException e) {e.printStackTrace();}}public void setFormate(String formate) {this.formate = formate;}}
方法二:
注册类型转换器
Configuring a ConversionService
A ConversionService is a stateless object designed to be instantiated at application startup, then shared between multiple threads. In a Spring application, you typically configure a ConversionService instance per Spring container (or ApplicationContext). That ConversionService will be picked up by Spring and then used whenever a type conversion needs to be performed by the framework. You may also inject this ConversionService into any of your beans and invoke it directly.
If no ConversionService is registered with Spring, the original PropertyEditor-based system is used.
To register a default ConversionService with Spring, add the following bean definition with id conversionService
:
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"/>
A default ConversionService can convert between strings, numbers, enums, collections, maps, and other common types. To suppliment or override the default converters with your own custom converter(s), set the converters
property. Property values may implement either of the Converter, ConverterFactory, or GenericConverter interfaces.
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <list> <bean class="example.MyCustomConverter"/> </list> </property></bean>以上为spring 官方reference关于注册类型转换器的介绍,其中说到"To suppliment or override the default converters with your own custom converter(s), set the
converters
property. Property values may implement either of the Converter, ConverterFactory, or GenericConverter interfaces."告诉我们可能实以 Converter, ConverterFactory, or GenericConverter这三个接口中的一个和相应配置来补充类型转换
<bean id="conversionService"class="org.springframework.context.support.ConversionServiceFactoryBean"><property name="converters"><list><bean class="String2DateConverter" /></list></property></bean>
import java.text.ParseException;import java.util.Date;import org.apache.commons.lang.time.DateUtils;import org.springframework.core.convert.converter.Converter;public class String2DateConverter implements Converter<String, Date> {@Overridepublic Date convert(String arg0) {try {return DateUtils.parseDate(arg0,new String[] { "yyyy-MM-dd HH:mm:ss" });} catch (ParseException e) {return null;}}}
java.lang.IllegalArgumentException: Left-hand side type must not be null 异常
以上两种方法都可满足需求,但是不能一起使用,一起使用就会出现这个问题,这是spring的一个bug,所以我们必须选择其中一种,我个人更倾向于第二种bug描述 : https://jira.springsource.org/browse/SPR-6807 其中说到: ConversionService fails with CustomEditorConfigurer. While it is not recommended to mix the two in the same context it is unavoidable
spring 相关api: http://static.springsource.org/spring/docs/3.0.x/reference/validation.html
- Spring 自定义属性编辑(CustomEditorConfigurer)和类型转换器(ConversionServiceFactoryBean)一起配置问题
- Spring 自定义属性编辑(CustomEditorConfigurer)和类型转换器(ConversionServiceFactoryBean)一起配置问题
- Spring MVC 参数转换(CustomEditorConfigurer)和类型转换器(ConversionServiceFactoryBean)
- Spring MVC 參數映射轉換(CustomEditorConfigurer)和类型转换器(ConversionServiceFactoryBean)
- springmvc之自定义类型转换器ConversionServiceFactoryBean
- 学习springmvc的第十三天(自定义类型转换器ConversionServiceFactoryBean)
- spring中自定义属性编辑器CustomEditorConfigurer
- spring中自定义属性编辑器CustomEditorConfigurer
- spring中自定义属性编辑器CustomEditorConfigurer
- spring中自定义属性编辑器CustomEditorConfigurer
- spring中自定义属性编辑器CustomEditorConfigurer
- spring中自定义属性编辑器CustomEditorConfigurer
- spring中自定义属性编辑器CustomEditorConfigurer
- spring中自定义属性编辑器CustomEditorConfigurer
- spring的自定义属性编辑器CustomEditorConfigurer
- Spring自定义属性转换器
- Spring自定义属性编辑器PropertyEditorSupport + 使用CustomEditorConfigurer注册属性编辑器
- Spring中的自定义类型转换器
- struts2提供的校验器列表
- Java泛型与接口的应用示例
- Google 如何冷却 100 万服务器
- 多对一、一对多的双向关联
- 甲骨文公布其 NoSQL 数据库 Blueprints API
- Spring 自定义属性编辑(CustomEditorConfigurer)和类型转换器(ConversionServiceFactoryBean)一起配置问题
- “黑马程序员"Comparable与Comparator的区别
- 传苹果明日发布会推新接口全尺寸 iPad
- lucene学习心得
- 新版本 Ubuntu 正式发布 加入Web Apps 功能
- java io2
- 你必须非常努力,才能看起来毫不费力
- 开源新篇章,红帽已前行。你跟上了么?
- 嵌入式操作系统内核原理和开发(优先级的修改)