博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-mvc的Conveter和Formatter
阅读量:6823 次
发布时间:2019-06-26

本文共 4586 字,大约阅读时间需要 15 分钟。

1. Converter

Spring的Converter可以将一种类型转换成另一种类型。

在使用时,必须编写一个实现org.springframework.core.convert.converter.Converter接口的java类。这个接口的声明如下

public interface Converter
{ T convert(S var1);}

这里的S表示源类型,T表示目标类型。

下面展示了一个将String类型转换成Date类型的Converter

import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.core.convert.converter.Converter;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class StringToDateConverter implements Converter
{ private static final Log logger = LogFactory.getLog(StringToDateConverter.class); private String datePattern; public StringToDateConverter(String datePattern) { this.datePattern = datePattern; } public Date convert(String s) { try { SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern); dateFormat.setLenient(false); return dateFormat.parse(s); } catch (ParseException e) { throw new IllegalArgumentException("invalid date format. Please use this pattern\"" + datePattern + "\""); } }}

为了使用Spring MVC应用程序定制的Converter,需要在配置文件中添加一个conversionService bean。Bean的类名称必须为org.springframework.context.support.ConversionServiceFactoryBean。这个bean必须包含一个converters属性,它列出要在应用程序中使用的所有定制Converter。下面bean声明注册了上面StringToDateConverter。

之后,还需要给annotation-driven元素的conversion-service属性赋上bean名称,如下

2. Formatter

Formatter和Converter一样,也是将一种类型转换成另一种类型。但是,Formatter的源类型必须是一个String。

在使用时,必须编写一个实现org.springframework.format.Formatter接口的java类。这个接口的声明如下

public interface Formatter
extends Printer
, Parser
{}public interface Printer
{ String print(T var1, Locale var2);}public interface Parser
{ T parse(String var1, Locale var2) throws ParseException;}

这里的T表示输入字符串要转换的目标类型。

parse方法利用指定的Locale将一个String解析成目标类型。print方法相反,它是返回目标对象的字符串表示法。
下面展示了一个将String类型转换成Date类型的Formatter

import org.springframework.format.Formatter;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;public class DateFormatter implements Formatter
{ private String datePattern; private SimpleDateFormat dateFormat; public DateFormatter(String datePattern) { this.dateFormat = dateFormat; dateFormat = new SimpleDateFormat(datePattern); dateFormat.setLenient(false); } public Date parse(String s, Locale locale) throws ParseException { try { SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern); dateFormat.setLenient(false); return dateFormat.parse(s); } catch (ParseException e) { throw new IllegalArgumentException("invalid date format. Please use this pattern\"" + datePattern + "\""); } } public String print(Date date, Locale locale) { return dateFormat.format(date); }}

为了使用Spring MVC应用程序定制的Formatter,需要在配置文件中添加一个conversionService bean。Bean的类名称必须为org.springframework.format.support.FormattingConversionServiceFactoryBean。这个bean可以用一个formatters属性注册Formatter,用一个converters属性注册Converter。下面bean声明注册了上面DateFormatter。

之后,还需要给annotation-driven元素的conversion-service属性赋上bean名称,如下

3. 用Registrar注册Formatter

注册Formatter的另一种方法是使用Registrar。

下面就用Registrar来注册前面的DateFormatter。
先需要实现org.springframework.format.FormatterRegistrar接口,如下

import org.springframework.format.FormatterRegistrar;import org.springframework.format.FormatterRegistry;public class MyFormatterRegistrar implements FormatterRegistrar {    private String datePattern;    public MyFormatterRegistrar(String datePattern) {        this.datePattern = datePattern;    }    public void registerFormatters(FormatterRegistry formatterRegistry) {        formatterRegistry.addFormatter(new DateFormatter(datePattern));        //register more formatters here    }}

有了Registrar,就不需要在Spring MVC配置文件中注册Formatter,只要在配置文件中注册Registrar就行,如下

4. 选择Converter还是Formatter

Converter是一般工具,可以将一种类型转换成另一种类型。例如,将String转换成Date,或者将Long转换成Date。Converter既可以用在web层,也可以用在其它层中。

Formatter只能将String转成成另一种java类型。例如,将String转换成Date,但它不能将Long转换成Date。所以,Formatter适用于web层。为此,在Spring MVC应用程序中,选择Formatter比选择Converter更合适。

转载地址:http://uwgzl.baihongyu.com/

你可能感兴趣的文章
Python符号计算:求解线性方程组
查看>>
Swift的一些翻译4:Designing UI Using Stack Views
查看>>
linux系统下的sed命令详解(一)
查看>>
c语言:有一个分数序列: 2/1+3/2+5/3+8/5+13/8+… 求出这个数列前 20 项的和
查看>>
JAVA 代理模式(Proxy)
查看>>
我的友情链接
查看>>
使用 golang 收集系统指标
查看>>
nginx 启动脚本
查看>>
Windows常用软件推荐
查看>>
引入css外部样式表的注意事项
查看>>
百篇大计敬本年之最强辅助《一》 —— SVN 服务器搭建与配置
查看>>
linux基础之篇--安装
查看>>
SolrCloud中的文件与Collection管理
查看>>
零基础学汇编语言x86
查看>>
使用sed追加指定格式的内容到指定行
查看>>
第4章 字符串操作和正则表达式
查看>>
圈复杂度和代码质量优化(附带示例代码纠正代码质量)
查看>>
linux 网桥设置
查看>>
微信小程序 - let,var,const 的了解
查看>>
html注释不规范在火狐浏览器里引起的bug解决方案
查看>>