This tutorial I will demonstrate how to create PropertyEditor to perform the conversion. First convert DateTime to String and print on the console. Example we have the following Agent class.
@Entity @Table(name = "agent") @Configurable public class Agent { @Id @Column(name = "agent_id", length = 15) private String agentId; @Column(name = "agent_name", length = 50) private String agentName; @Column(name = "contact", length = 50) private String contact; @Column(name = "email", length = 50) private String email; @Column(name = "expired_date") private DateTime expiredDate; // .... code omitted }
1) Now’s register the agent bean in application context.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <bean id="dateTimeEditor" class="com.codeomitted.editor.DateTimeEditor"> <constructor-arg value="dd-MM-yyyy"/> </bean> <bean id="agentSmith" class="com.codeomitted.model.Agent" p:agentId="mba123" p:name="wilsmith" p:age="30" p:contact="smith" p:email="agentsmith@loremipsum.com" p:expiredDate="30-11-2013" /> </beans>
1) Create a simple java application to print the agent object.
import com.codeomitted.model.Agent; public class App { public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:application-validation-editor.xml"); ctx.refresh(); Agent agent = ctx.getBean("agentSmith", Agent.class); System.out.println("agent id : " + agent.getAgentId()); System.out.println("agent name : " + agent.getName()); System.out.println("agent contact : " + agent.getContact()); System.out.println("agent email : " + agent.getEmail()); System.out.println("agent age : " + agent.getAge()); System.out.println("agent expired : " + agent.getExpiredDate()); } }
2) Now check the exception, Failed to convert property value of type String to required type DateTime.
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type ‘java.lang.String’ to required type ‘org.joda.time.DateTime’ for property ‘permitExpiredDate’; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.joda.time.DateTime] for property ‘permitExpiredDate’: no matching editors or conversion strategy found
3) We need a propertyEditor to convert the DateTime to String.
public class DateTimeEditor extends PropertyEditorSupport { private DateTimeFormatter formatter; public DateTimeEditor(String pattern) { formatter = DateTimeFormat.forPattern(pattern); } public void setAsText(String text) throws IllegalArgumentException { setValue(DateTime.parse(text, formatter)); } }
4) Execute again, the result can be print as string.
agent id : mba123 agent name : wilsmith agent contact : smith agent email : agentsmith@loremipsum.com agent age : 30 agent expired : 2013-11-30T00:00:00.000+08:00