Spring MVC 学习指南--- 第六章 converter 和formatter

Spring可以完成表达数据到对象属性的转换,其实默认提供了很多类型转换器。

详细内容可以参考http://www.cnblogs.com/wewill/p/5676920.html

本文主要讲解converter和formatter的使用。是类似helloworld的程序。


一、spring 中有许多方式实现自动的格式转换,都需要注册

<mvc:annotation-driven conversion-service="具体实现" />

实现:

(1)conversionService  可以转换任意类型为指定类型

(2)formaterService     只能转换String到指定类型,适合web工程

(3)formatterRegistrars  另一种注册formatter的形式,将formatter在registaras直接进行注册。


代码:


配置文件:

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.1.xsd 
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.1.xsd 
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"
>
  
    <!--<mvc:annotation-driven conversion-service="conversionService" />-->
  <!--<mvc:annotation-driven conversion-service="formaterService" />  -->
  <mvc:annotation-driven conversion-service="formatterRegistrars" /> 
  <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
  <property name="converters">
  	<list>
  		<bean class="Converter.StringToDateConverter">
  			<constructor-arg type="java.lang.String" value="MM-dd-yyyy"/> 
  		
  		
  		</bean>
  	
  	</list>
  
  </property>
  
  </bean>
  
  <bean id = "formaterService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  	<property name="formatters">
  		<set>
  			<bean class = "DateFormMatter.DateFormatter">
  				<constructor-arg type="java.lang.String" value="MMddyyyy"/>
  				
  			</bean>
  		</set>
  	
  	</property>
  
  </bean>
  
  <bean id ="formatterRegistrars" class ="org.springframework.format.support.FormattingConversionServiceFactoryBean">
  	<property name="formatterRegistrars">
  		<set>
  			<bean class="DateFormMatter.MyFormatterRegistar">
  				<constructor-arg type="java.lang.String" value="MM-dd-yyyy"/>
  			
  			</bean>
  		
  		</set>
  	
  	
  	</property>
  
  
  </bean>
  




</beans>


converters实现:

package Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class StringToDateConverter implements Converter<String, Date>{

	private String datePattern;
	@Override
	public Date convert( String s){
		
		SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);
		dateFormat.setLenient(false);
		
		try {
			return dateFormat.parse(s);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new  IllegalArgumentException("invalid date format ,Please use this pattern\""
					+datePattern +"\"");
		}
	}
	
	public StringToDateConverter(String datePattern)
	{
		this.datePattern = datePattern;
		System.out.println("instantiating .... converter with pattern:*"+datePattern);;
	}

}


formatter实现

package DateFormMatter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.springframework.format.Formatter;

public class DateFormatter implements Formatter<Date>{

	
	private String datePattern;
	private SimpleDateFormat dateFormat;
	
	
	
	public DateFormatter(String datePattern) {
		super();
		
		this.datePattern = datePattern;
		dateFormat = new SimpleDateFormat(this.datePattern);
		
	}

	@Override
	public String print(Date date, Locale locale) {
	
		return dateFormat.format(date);
	}

	@Override
	public Date parse(String s, Locale locale) throws ParseException {
		
		return dateFormat.parse(s);
	}

}




Registrars 定义


package DateFormMatter;

import org.springframework.format.FormatterRegistrar;
import org.springframework.format.FormatterRegistry;

public class MyFormatterRegistar implements FormatterRegistrar {

	private String datePattern;
	public MyFormatterRegistar(String datePattern)
	{
		this.datePattern = datePattern;
	}
	@Override
	public void registerFormatters(FormatterRegistry register) {
		// TODO Auto-generated method stub
		register.addFormatter(new DateFormatter(datePattern));

	}

}







猜你喜欢

转载自blog.csdn.net/nash885/article/details/72953201