springmvc数据格式化colin老师_第1页
springmvc数据格式化colin老师_第2页
springmvc数据格式化colin老师_第3页
springmvc数据格式化colin老师_第4页
springmvc数据格式化colin老师_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringMVC数据格式化2015技术成就梦想

老师助理QQ:553140257潭州学院课程大纲数据格式化简介FormatterSPI简介数据格式化架构内建的格式化转换器类型级别的解析/格式化字段级别的解析/格式化自定义注解进行字段级别的解析/格式化数据格式化简介

在Web项目中,通常需要将数据转换为具有某种格式的字符串进行展示,上节我们学习的数据类型转换系统核心作用不是完成这个需求,因此Spring3引入了格式化转换器(FormatterSPI)和格式化服务API

(FormattingConversionService)从而支持这种需求。

FormatterSPI简介 FormatterSPI核心是完成解析和格式化转换逻辑,在如Web项目中,需要解析、打印/展示本地化的对象值时使用,如根据Locale信息将java.util.Date---->java.lang.String打印/展示、java.lang.String---->java.util.Date等。

该格式化转换系统是Spring通用的,其定义在org.springframework.format包中,不仅仅在SpringWebMVC场景下用。

数据格式化架构

一、格式化转换器:提供格式化转换的实现支持二、格式化转换器注册器、格式化服务:提供类型转换器注册支持,运行时类型转换API支持。

数据格式化架构一、格式化转换器:提供格式化转换的实现支持;

数据格式化架构1、Printer接口:格式化显示接口,将T类型的对象根据Locale信息以某种格式进行打印显示(即返回字符串形式);

packageorg.springframework.format;

publicinterfacePrinter<T>{

Stringprint(Tobject,Localelocale);

}

数据格式化架构2、Parser接口:解析接口,根据Locale信息解析字符串到T类型的对象;

packageorg.springframework.format;

publicinterfaceParser<T>{

Tparse(Stringtext,Localelocale)throwsParseException;

}

数据格式化架构3、Formatter接口:格式化SPI接口,继承Printer和Parser接口,完成T类型对象的格式化和解析功能;

packageorg.springframework.format;

publicinterfaceFormatter<T>extendsPrinter<T>,Parser<T>{

}

数据格式化架构4、AnnotationFormatterFactory接口:注解驱动的字段格式化工厂,用于创建带注解的对象字段的Printer和Parser,即用于格式化和解析带注解的对象字段。

packageorg.springframework.format;

publicinterfaceAnnotationFormatterFactory<AextendsAnnotation>{//①可以识别的注解类型

Set<Class<?>>getFieldTypes();//②可以被A注解类型注解的字段类型集合

Printer<?>getPrinter(Aannotation,Class<?>fieldType);//③根据A注解类型和fieldType类型获取Printer

Parser<?>getParser(Aannotation,Class<?>fieldType);//④根据A注解类型和fieldType类型获取Parser数据格式化架构二、格式化转换器注册器、格式化服务:提供类型转换器注册支持,运行时类型转换API支持。1、FormatterRegistry:格式化转换器注册器,用于注册格式化转换器(Formatter、Printer和Parser、

AnnotationFormatterFactory)2、FormattingConversionService:继承自ConversionService,运行时类型转换和格式化服务接口,提供运行期类型转换和格式化的支持。

内建的格式化转换器类名说明DateFormatterjava.util.Date<---->String

实现日期的格式化/解析NumberFormatterjava.lang.Number<---->String

实现通用样式的格式化/解析CurrencyFormatterjava.lang.BigDecimal<---->String

实现货币样式的格式化/解析PercentFormatterjava.lang.Number<---->String

实现百分数样式的格式化/解析内建的格式化转换器类名说明NumberFormatAnnotationFormatterFactory@NumberFormat注解类型的数字字段类型<---->String

①通过@NumberFormat指定格式化/解析格式

②可以格式化/解析的数字类型:Short、Integer、Long、Float、Double、BigDecimal、BigIntegerJodaDateTimeFormatAnnotationFormatterFactory@DateTimeFormat注解类型的日期字段类型<---->String

①通过@DateTimeFormat指定格式化/解析格式

②可以格式化/解析的日期类型:

joda中的日期类型(org.joda.time包中的):LocalDate、LocalDateTime、LocalTime、ReadableInstant,java内置的日期类型:Date、Calendar、Long。

classpath中必须有Joda-Time类库,否则无法格式化日期类型内建的格式化转换器

NumberFormatAnnotationFormatterFactory和

JodaDateTimeFormatAnnotationFormatterFactory(如果classpath提供了JodaTime类库)在使用格式化服务实现DefaultFormattingConversionService时会自

动注册。

类型级别的解析/格式化1、直接使用FomatterSPI

CurrencyFormattercf=newCurrencyFormatter();//设置保留小数点后2位cf.setFractionDigits(2);//四舍五入cf.setRoundingMode(RoundingMode.HALF_UP);cf.print(newBigDecimal("2134.236"),Locale.CHINA);

类型级别的解析/格式化2、使用DefaultFormattingConversionService

DefaultFormattingConversionServiceconversionService=new DefaultFormattingConversionService();

//默认不自动注册任何Formatter

CurrencyFormattercurrencyFormatter=newCurrencyFormatter();

currencyFormatter.setFractionDigits(2);//保留小数点后几位

currencyFormatter.setRoundingMode(RoundingMode.HALF_UP);//舍入模式(ceilling表示四舍五入)

//注册FormatterSPI实现

conversionService.addFormatter(currencyFormatter);

//如果不设值默认是Locale.getDefault()

LocaleContextHolder.setLocale(Locale.US);字段级别的解析/格式化

前面学习了类型级别的解析/格式化,从测试用例可以看出类型级别的是对项目中的整个类型实施相同

的解析/格式化逻辑。

需要在不同的类的字段实施不同的解析/格式化逻辑,如用户模型类的注册日期字段只需要如“2015-06-06”格式进行解析/格式化即可,而订单模型类的下订单日期字段可能需要如“2013-06-0620:13:13”格式进行展示。

这个就需要进行字段级别的解析/格式化了。

字段级别的解析/格式化1:@Number:定义数字相关的解析/格式化元数据(通用样式、货币样式、百分数样式),参数如下:

(1)style:用于指定样式类型,包括三种:Style.NUMBER(通用样式)Style.CURRENCY(货币样式)Style.PERCENT(百分数样式),默认Style.NUMBER;

(2)pattern:自定义样式,如patter=“#,###”;

2:@DateTimeFormat:定义日期相关的解析/格式化元数据,参数如下:

(1)pattern:指定解析/格式化字段数据的模式,如”yyyy-MM-ddHH:mm:ss”

字段级别的解析/格式化

(2)iso:指定解析/格式化字段数据的ISO模式,包括四种:ISO.NONE(不使用)ISO.DATE(yyyy-MM-dd)ISO.TIME(hh:mm:ss.SSSZ)ISO.DATE_TIME(yyyy-MM-ddhh:mm:ss.SSSZ),默认ISO.NONE;

(3)style:指定用于格式化的样式模式,默认“SS”,具体使用请参考Joda-Time类库的org.joda.time.format.DateTimeFormat的forStyle的javadoc;

优先级:pattern大于iso大于style。

自定义注解进行字段级别的解析/格式化1、定义解析/格式化字段的注解类型:@Target({ElementType.METHOD,

ElementType.FIELD,

ElementType.PARAMETER})

@Retention(RetentionPolicy.RUNTIME)

public

@interface

PhoneNumber

{

}

2、实现AnnotationFormatterFactory注解格式化工厂:自定义注解进行字段级别的解析/格式化

自定义注解进行字段级别的解析/格式化自定义注解与SpringMVC集成1、注册FormattingConversionService实现和自定义格式化转换器:<bean

id="conversionService"

class="org.springframework.format.support.FormattingConversionServiceFactoryBean">

<property

name="formatters">

<list>

<bean

class=“com.tz.smvc.chapter06.formatter.PhoneNumberFormatAnnotationFormatterFactory"/>

</list>

</property>

</bean>自定义注解进行字段级别的解析/格式化2、通过ConfigurableWebBindingInitializer注册ConversionService

自定义注解进行字段

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论