`

Spring中自定义日期的转换

阅读更多
在Spring中,如何向bean中的注入符合格式的日期呢?看下面的例子:

import java.util.Date;
 
public class Customer {
 
	Date date;
 
	public Date getDate() {
		return date;
	}
 
	public void setDate(Date date) {
		this.date = date;
	}
 
	@Override
	public String toString() {
		return "Customer [date=" + date + "]";
	}
 
}


然后配置文件中:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="customer" class="com.liao.Customer">
<property name="date" value="2011-01-31" />
</bean>

</beans>
  这样注入是出錯的,报錯:

ApplicationContext context = new ClassPathXmlApplicationContext(
"SpringBeans.xml");

Customer cust = (Customer) context.getBean("customer");
System.out.println(cust);

Caused by: org.springframework.beans.TypeMismatchException:
Failed to convert property value of type [java.lang.String] to
required type [java.util.Date] for property 'date';

nested exception is java.lang.IllegalArgumentException:
Cannot convert value of type [java.lang.String] to
required type [java.util.Date] for property 'date':
no matching editors or conversion strategy found

解决的方法有两个,一个是使用factory bean:
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<bean id="dateFormat" class="java.text.SimpleDateFormat">
		<constructor-arg value="yyyy-MM-dd" />
	</bean>
 
	<bean id="customer" class="com.liao.Customer">
		<property name="date">
			<bean factory-bean="dateFormat" factory-method="parse">
				<constructor-arg value="2010-01-31" />
			</bean>
		</property>
	</bean>
 
</beans>


另外的方法是使用CustomDateEditor,方法如下:
 
<bean id="dateEditor"
		class="org.springframework.beans.propertyeditors.CustomDateEditor">
 
		<constructor-arg>
			<bean class="java.text.SimpleDateFormat">
				<constructor-arg value="yyyy-MM-dd" />
			</bean>
		</constructor-arg>
		<constructor-arg value="true" />
 
	</bean>
 
	<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
					<ref local="dateEditor" />
				</entry>
			</map>
		</property>
	</bean>
 
	<bean id="customer" class="com.liao.Customer">
		<property name="date" value="2010-02-31" />
	</bean>
 

---------------------------------------------
讲解:
Spring 在装配Bean 时可以使用字符串装配其他数据类型,如URL。也就是说Spring 会自动的将String 类型转换成URL类型进行Bean 的属性装配。这是通过JavaBean API 实现的(java.beans.PropertyEditor 接口)。 那么如何通过Spring 配置将String 类型转换成自定义的类型呢?

      这首先需要写一个编辑器类,该类用于实现将String 类型转换成您需要的数据类型。这只需要继承JDK 中的 java.beans.PropertyEditorSupport 类来实现自己的编辑器类。然后我们只需要在Spring 的容器中对这个编辑器进行有效的“注册”便可以实现Spring 在装配Bean 时自动的将Strng 类型转换成我们自定义的类型。 这就是今天我要介绍的CustomEditorConfigurer 类用于实现在Spring 中注册自己定义的编辑器。它是Spring 当中一个非常有用的工厂后处理类(工厂后处理通过Spring 的BeanFactoryPostProcessor 接口实现, 它是在Spring 容器启动并初始化之后进行对Spring 容器的操作类)。在Spring 中已经注册了不少编辑器类,他们都用于String 类型转换为其他的数据类型,如URL,Date等。

分享到:
评论

相关推荐

    SpringBoot中自定义消息转换器示例源码

    下面我们将详细探讨Spring Boot中如何自定义消息转换器,并通过示例源码进行解析。 首先,我们需要创建一个实现了`org.springframework.http.converter.HttpMessageConverter`接口的类。这个接口定义了三个主要方法...

    Spring MVC自定义日期类型转换器实例详解

    自定义日期类型转换器的实现步骤大致如下: 1. 定义一个转换器类,实现特定接口:文件中提供了自定义的日期类型转换器的示例代码。这个转换器名为JsonDateValueProcessor,它实现了JsonValueProcessor接口。这个...

    spring 自定义属性编辑器

    例如,从请求参数或配置文件中读取的字符串可能需要转换为日期、颜色代码或其他自定义类型。这篇博客“spring 自定义属性编辑器”可能详细介绍了如何在Spring中创建和注册自定义属性编辑器,以满足特定的业务需求。 ...

    自定义全局类型转换器

    在实际开发中,Spring的Structs2库也提供了类似的机制,允许开发者自定义类型转换。虽然本问题没有提供Structs2相关的具体文件,但可以推测该库可能包含了一些示例或工具,帮助开发者理解和实践自定义类型转换。通过...

    spring中的自定义属性编辑器

    在Spring中,我们可以通过自定义属性编辑器来处理特定类型的值,例如日期、颜色代码或其他自定义对象。这在配置bean属性或处理HTTP请求参数时特别有用。 自定义属性编辑器的创建通常涉及以下步骤: 1. **创建编辑...

    spring mvc3.1.0 日期自动转换

    -- 自定义或增强日期转换器 --&gt; ``` 4. 国际化支持:Spring MVC还考虑到了国际化需求,允许你根据用户的语言环境(locale)来调整日期的格式。这可以通过定义不同的日期格式模板并在服务器端进行动态选择来实现...

    spring自定义编辑器

    ### Spring自定义编辑器详解 #### 一、引言 在Spring框架中,自定义编辑器主要用于处理数据类型的转换问题,特别是在将用户输入的数据转换为Java对象时非常有用。例如,用户通过表单提交了一个日期格式的字符串,...

    Spring学习笔记(11)----自定义属性编辑器

    总之,自定义属性编辑器是Spring框架中一个非常实用的特性,它允许我们扩展和定制数据转换逻辑,以适应各种复杂的需求。通过理解和熟练运用自定义属性编辑器,开发者可以更好地利用Spring的IoC功能,提高代码的灵活...

    spring2.0(三) 自定义属性编辑器

    在Spring 2.0框架中,自定义属性编辑器(Custom Property Editor)是一个重要的功能,它允许开发者扩展Spring的默认属性绑定机制,以处理特定类型的转换。本文将深入探讨这一特性,结合源码分析和实际应用,帮助你...

    struts2自定义编写转换类

    下面将详细讲解如何在Struts2中实现自定义转换类。 首先,了解Struts2的转换机制。当Action中的字段与请求参数匹配时,Struts2会尝试找到一个合适的转换器来处理这个参数。默认情况下,Struts2通过Action上下文...

    SpringMVC自定义类型转换器实现解析

    最后,我们需要将自定义的类型转换器配置到SpringMVC框架中,以便SpringMVC框架能够使用我们自定义的类型转换器。我们可以通过在mvc:annotation-driven元素中添加conversion-service属性来实现这一点。 ```xml ```...

    struts日期转换器

    在`date_convert`这个压缩包文件中,可能包含了实现自定义日期转换器的示例代码,或者是演示如何在Struts应用中配置和使用日期转换器的教程。这些资源可以帮助开发者理解并解决在处理日期字段时可能出现的格式问题,...

    Springmvc自定义类型转换器实现步骤

    这意味着即使你定义了一个新的日期转换器,Spring仍然会使用内置的转换器处理其他格式的日期字符串。 2. 在处理异常时,如果转换失败,应该抛出`TypeMismatchException`或其子类,以便Spring MVC可以提供合适的错误...

    java自定义日期转化类示例

    总结来说,通过自定义日期转换类,我们可以在Java应用程序中灵活地处理日期字符串到日期对象的转换,特别是在处理用户输入或从数据库读取日期数据时。这提高了代码的可重用性和可维护性,同时降低了因日期格式不匹配...

    29 Spring MVC之类型转换Converter慕课专栏1

    在Spring MVC中,类型转换是将用户输入的数据(通常是字符串)转换为模型对象中的预期类型。在早期版本中,我们依赖于`PropertyEditor`来完成这个任务,它只能处理从`String`到其他类型的转换。然而,随着Spring的...

    一款spring提供的高效数据转换工具最新版

    标题中的“一款spring提供的高效数据转换工具最新版”指的是Spring框架中的一个组件,它用于处理数据转换,特别是JSON数据的序列化与反序列化。在Spring生态中,这个工具可能是Spring Data REST或Spring MVC的一部分...

    springmvc自定义属性编辑器和参数解析器

    在Spring MVC框架中,属性编辑器(PropertyEditor)和参数解析器(HandlerMethodArgumentResolver)是两个关键组件,用于处理数据转换和模型绑定的过程。它们是实现灵活性和扩展性的重要手段,尤其在处理用户输入...

    datatables render与日期转换(moment.js)

    在Spring MVC中,你可以将日期转换为符合JSON标准的格式,如ISO 8601,然后在前端使用`moment.js` 进一步处理。 此外,对于大型应用,为了优化性能,可以考虑使用`moment.js` 的轻量级版本`moment.min.js`,或者...

    Springboot DTO字符字段与日期字段的转换问题.docx

    在这种情况下,Spring Boot默认并不会自动将前端传来的字符串日期转换为Date对象,反之亦然。这是因为JSON标准并没有定义日期的特定格式,所以需要我们手动处理这种转换。 在上述例子中,`UserDTO`类有一个`...

Global site tag (gtag.js) - Google Analytics