Formatter(格式化)和 Converter(格式化)

2023-05-16

功能:

Spring框架的功能,Formatter和Converter均可以将一种对象类型转换成另一种对象类型。


区别:

Converter是通用元件,可以在应用程序的任意层中使用。

Formatter是专门为Web层设计的。

Formatter的原类型必须是String,Converter适用于任意类型。


Converter的使用:

1、实现org.springframework.core.convert.converter.Converter接口

    接口的声明:public interface Converter<S,T>    (S是原类型,T是目标类型)

    实现T conver (S source)

2、配置springmvc配置文件

    编写一个conversion bean ,类名为:org.springframework.context.support.ConversionServiceFactoryBean

    bean包含一个converters属性,列出要在应用程序中使用的Converter。

3、添加<mvc:annotation-driven conversion-service="上边那个bean的名称"/>


Converter的实例(将String类型的日期转为Date):
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

public class StringToDateConverter implements Converter<String, Date> {
	private String datePattern;
	
	public StringToDateConverter(String datePattern)
	{
		this.datePattern = datePattern;
		System.out.println("converter with pattern:"+datePattern);
	}

	@Override
	public Date convert(String s) {
		try
		{
			SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
			sdf.setLenient(false);//是否严格解析日期
			return sdf.parse(s);
		}
		catch(java.text.ParseException e)
		{
			throw new IllegalArgumentException(
					"Invalid date format. Please use this pattern\"" + datePattern + "\"");
		}
	}
}

springmvc配置文件:

<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<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">
					</constructor-arg>
				</bean>
			</list>
		</property>
</bean>
Formatter的使用:

1、实现org.springframework.format.Formatter接口

    接口的声明:public interface Formatter<T>    (T是目标类型)

    实现

T parse(String text, java.util.Locale locale)
String print(T object, java.util.Locale locale)

    parse方法利用指定的locale将String解析成目标类型。

    print方法返回目标对象的字符串表示法。

2、配置springmvc配置文件

    编写一个conversionService bean ,类名为:org.springframework.format.support.FormattingConversionServiceFactoryBean

3、添加<mvc:annotation-driven conversion-service="上边那个bean的名称"/>


Formatter的实例(将String类型的日期转为Date):
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 sdf;
	
	public DateFormatter(String datePattern)
	{
		this.datePattern = datePattern;
		sdf = new SimpleDateFormat(datePattern);
		sdf.setLenient(false);
	}

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

	@Override
	public Date parse(String s, Locale locale) throws ParseException {
		try
		{
			return sdf.parse(s);
		}
		catch(ParseException e)
		{
			throw new IllegalArgumentException(
					"Invalid date fromat. Please use this pattern\""+datePattern+"\"");
		}
	}
}

springmvc配置文件:

<context:component-scan base-package="formatter"></context:component-scan> //配置包扫描器
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="formatters">
			<set>
				<bean class="formatter.DateFormatter">
					<constructor-arg type="java.lang.String" value="MM-dd-yyyy">
					</constructor-arg>
				</bean>
			</set>
		</property>
</bean>









本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Formatter(格式化)和 Converter(格式化) 的相关文章

  • el-table-column中formatter格式化字典

    el table column中formatter格式化字典 vue 中使用 lt el table column gt 中的 formatter 格式化内容 x1f52e lt template gt lt 列表 gt lt el tab
  • VUE专题 elementUI中tableColumn 的formatter用法

    示例一 页面中 对应方法 示例二 对应方法 这里是为了截取前面的时间戳
  • el-table-column的formatter的使用

    当后端返回来的数据格式需要再去处理 xff1b 可以使用formatter属性 lt el table column label 61 34 性别 34 align 61 34 center 34 formatter 61 34 genda
  • android EditText,键盘textWatcher问题

    我正在开发一个 Android 应用程序 我有一个 EditText 用户可以在其中输入数字 我想使用不同的货币格式 例如 来格式化数字 并且我想即时执行此操作 即当用户输入每个数字时 而不是按下回车键时 我用谷歌搜索了一下 发现文本观察器
  • Eclipse 格式化程序可以配置为在括号之间正确缩进多行吗?

    可以配置 或扩展 Eclipse 格式化程序和代码清理来添加我在以下示例中期望的缩进 public static void main String args String numbers new String one two three f
  • Symfony2:在登录不同文件时使用处理器

    我想将我的应用程序日志写入另一个文件 而不是 Symfony2 写入自己的日志和系统日志的文件 我知道我需要创建自己的服务 如下所示 services actionslogger class Symfony Bridge Monolog L
  • URL 的 Bootstrap 表格式化程序

    JavaScript function LinkFormatter value row index return a href value a HTML th LINK th th DATA th JSON data https www s
  • 如何强制 Eclipse 换行? [复制]

    这个问题在这里已经有答案了 有没有办法让 Eclipse 将带有 b 的行换行至每行 120 的长度 我无法配置代码格式化程序来换行 这真的让我抓狂 public class Position public static void i er
  • 强制 xml 返回某些 Web api 控制器,同时保持默认 JSON

    我们正在做一些 azure 商店集成 其资源提供程序代码要求我们使用 xml 作为返回格式化程序 然而 我们只想将 XML 与 Azure 内容一起使用 而保留默认的 JSON 格式化程序 那么 有谁知道如何强制特定控制器 方法的 Web
  • String.format、long 和 DateTime 转换

    如果问题是重复的 我很抱歉 我没有通过谷歌找到任何东西 对于我的问题 我有以下测试 public void testSecondsToMinutes long zero 0 long thirty seconds 30 long one m
  • 如何正确格式化 python 日志格式化程序?

    我尝试按照 Python 日志格式化程序输出字符串的方式进行格式化 我写了一个简单的例子来说明这个问题 import logging from pathlib import Path create auxiliary variables l
  • 如何在ios上正确格式化货币

    我正在寻找一种在不使用 TextField hack 的情况下将字符串格式化为货币的方法 例如 我想将数字 521242 转换为 5 212 42 或者 如果我有一个低于 1 美元的数字 我希望它看起来像这样 52 gt 0 52 Than
  • 日期时间:以微秒为单位舍入/修剪位数

    目前我正在记录内容 并且正在使用我自己的格式化程序和自定义formatTime def formatTime self record datefmt t datetime datetime now return t strftime Y m
  • 如何管理非托管 Eclipse 格式化配置文件?

    我们的项目有一个 非托管配置文件 和节省时间的自动格式化 我希望能够修改此非托管配置文件的设置 并能够将它们重新签入版本控制 Eclipse 的帮助文档非常没有帮助 您不允许更改这样的配置文件 只有配置文件的创建者 管理员 可以更改它 我不
  • JFormattedTextField 问题

    1 如何在不使用包含在invokeLater 中的Caret或Focus的情况下将Cursor设置为0位置 可以通过使用 camickr轻松解决格式化文本字段提示 http tips4java wordpress com 2010 02 2
  • Objective C 距离字符串格式化程序

    我有一个距离作为浮动 我正在寻找一种方法来为人类读者很好地格式化它 理想情况下 我希望随着它变大 它从 m 变为 km 并很好地舍入数字 转换成里程将是一个额外的好处 我确信很多人都需要其中之一 我希望有一些代码在某个地方 这是我想要的格式
  • Android NumberPicker with Formatter 在首次渲染时不会格式化

    我有一个 NumberPicker 它有一个格式化程序 可以在 NumberPicker 旋转或手动输入值时格式化显示的数字 这工作正常 但是当 NumberPicker 首次显示并且我用以下命令初始化它时setValue 0 0 不会被格
  • 渲染图表后,从图表对象更改 Highcharts 工具提示格式化程序

    我发现我可以使用 setData 更改系列 并且我知道我可以使用 setExtremes 修改最大值 但我无法弄清楚如何从图表对象设置工具提示格式化程序 我如何更新该字段 如果我有一个图表对象 如何更新其工具提示格式化程序属性 以及plot
  • Java String.format() 与 HALF_EVEN 舍入

    我想用String format 将一些 BigDecimal 格式化为字符串的一部分 Example String getPrice String pattern BigDecimal price basePrice multiply B
  • Java中有类似sprintf的方法吗?

    Java中有类似sprintf的方法吗 在某种程度上 String format 就像这里有一个可用的 Java sprintf 方法 String status String format The rename status is d R

随机推荐

  • PID控制器整理分享

    概述 日常开发中 xff0c 常常需要对速度 温度等物理量进行稳态控制 xff0c 而在目前的自动化控制原理中 xff0c 使用最为广泛的方法就是PID控制算法 本文简要整理分享PID控制器的使用 正文 PID控制器 xff0c 即比例 积
  • Markdown插入图片的方法

    Markdown插入图片的方法 Markdown插入图片的语法 xff1a alt 属性文本 图片地址 alt 属性文本 图片地址 34 可选标题 34 说明 xff1a 以感叹号开头 接着一个中括号 接着一个小括号 xff0c 里面放上图
  • SLA的基本概念

    SLA的基本概念 现在的产品和系统都非常的复杂 xff0c 彼此连接依赖越来越复杂 xff0c 为了整体的高速运转 xff0c 对每个部件的稳定性越来越高 xff0c 越来越精密 xff0c 发展到一定程度 xff0c 人力已经无法掌控 x
  • ssh远程登录可能出现的问题以及解决办法

    首先 确保server端的ssh服务是开的 xff08 service shhd start xff09 然后在client端输入 xff1a ssh usrname 64 serverip xff08 远程登录 xff09 scp fil
  • 各种滤波原理

    1 维纳滤波 维纳滤波是一种平稳随机过程的最佳滤波理论 xff0c 换句话说就是在滤波过程中系统的状态参数 xff08 或信号的波形参数 xff09 是稳定不变的 它将所有时刻的采样数据用来计算互相关矩阵 xff0c 涉及到解维纳 xff0
  • MTCNN算法提速应用(ARM测试结果评估)

    经博主测试 xff0c mtcnn原三层网络如果用于工程测试 xff0c 误检情况严重 xff0c 在fddb上测试结果也是 xff0c 经常将手或者耳朵 检测为人脸 xff0c 这个很头疼 xff08 因为标注数据 xff01 xff09
  • 国外知名音频库一站式资料和简介

    Speex Speex http blog csdn net xyz lmn article details 8013490 简介 Speex是一套主要针对语音的开源免费 xff0c 无专利保护的音频压缩格式 Speex工程着力于通过提供一
  • vs2010调试工具栏不可用(变灰)解决办法

    菜单中页不能进行调试 使用vs的命令行工具 在命令行中运行 xff1a devenv ResetSkipPkgs 重新打开vs xff08 注 xff1a 第一次没有关闭vs xff0c 运行这条命令后 xff0c 会新打开vs没有变化 x
  • STM32 抗锯齿中文显示另类方案分享

    STM32 抗锯齿中文显示另类方案分享 最近在玩车载液晶仪表 xff0c 之前用Arduino 43 USART液晶 xff0c 后来发现Arduino性能不够 xff0c 就转向STM32 由于需要在液晶屏上显示手机信息 xff0c 先是
  • [Pixhawk] ardupilot源码windows编译教程

    声明 此教程最开始取自于淘宝商家 xff0c 后查找资料发现淘宝商家取自 怒飞垂云 的教程 xff0c 但原教程中有些冗余和错误导致无法通过编译 xff0c 我做更改整理后发出 xff0c 如有疑问请各位一起讨论 目录 一 建立飞控固件编译
  • pixhawk MP地面站 NTF_LED参数相关

    NeoPixel Copter documentation 这一部分里面的NTF相关参数 xff0c 对应MP地面站里的这几项 不是给外接WS2812设置的 我折腾了一下午 xff0c 再更改了其他一些参数后 xff0c 导致飞控上那个最大
  • 无人机betaflight 地面站遥控器通道最低点不是1000,最高点不是2000,中点不是1500的调整办法

    参考老外的视频 How to fix the endpoints of your Rx channels with RXRANGE in Betaflight or Cleanflight EASY FIX 需要进入CLI界面 xff0c
  • 八皇后详解

    历史 八皇后问题是一个古老而著名的问题 xff0c 是回溯算法的典型例题 该问题是十九世纪著名的数学家高斯1850年提出 xff1a 在8X8格的国际象棋上摆放八个皇后 xff0c 使其不能互相攻击 xff0c 即任意两个皇后都不能处于同一
  • KVM虚拟机创建功能详细讲解

    KVM虚拟机创建功能详细讲解 一 KVM虚拟机创建的用户操作 对于用户或者管理员来说 xff0c 虚拟机的创建有着很多的方法 xff0c 例如 xff1a kvm自带命令行工 具 使用virsh命令来创建 使用具有图形界面的virt man
  • JS中堆和栈

    什么是栈和堆 栈和堆的主要作用存储变量 xff0c 根据变量值得不同存储的位置也不同 在JS中 xff0c 栈主要是存储基本类型的变量 xff0c 包括String Number Boolean Undefined Null 和 对象类型的
  • 实例:Python调用c++文件(参数为指针和数组指针)

    本文作为Python调用c 43 43 的进阶实现 xff0c 简单的实现参考文章Python调用c 43 43 高级 xff08 swig xff09 1 一个小小的工作目标 通过Python调用c 43 43 文件 xff0c 生成一个
  • RT-Thread学习笔记——信号量

    前言 本文讲RT Thread的线程间同步之信号量 xff0c 包括为什么要进行线程间同步 信号量创建与删除 信号量获取与释放以及基于STM32的二值信号量示例和计算型信号量示例 xff0c 采用RTT amp 正点原子联合出品潘多拉开发板
  • ssh Connection closed by remote host解决

    描述 最近某台服务器隔一段时间就会有ssh连接失败的告警 xff0c 但是上去排查的时候会发现ssh并没有连接失败的错误 后来有在ssh的地方添加日志 xff0c 打印错误的输出 xff0c 最终得到的报错Stderr ssh exchan
  • linux-2.6.32.6源码目录结构分析及其driver所占比重

    find maxdepth 1 type d name exec du sh 未编译个目录文件大小 xff1a 423M linux 2 6 32 6 5 8M firmware 1 3M lib 140K init 144K virt 2
  • Formatter(格式化)和 Converter(格式化)

    功能 xff1a Spring框架的功能 xff0c Formatter和Converter均可以将一种对象类型转换成另一种对象类型 区别 xff1a Converter是通用元件 xff0c 可以在应用程序的任意层中使用 Formatte