PropertyEditor、Formatter、Converter的应用
@ResponseBody
@RequestMapping("date.do")
public String data(Date date) {
return date.toString();
}
访问路径:http://localhost:8080/date.do?date=1996-11-11
一、PropertyEditor的应用
内置的可扩展性;局部使用webdatabinder
实例:
@InitBinder("date")
public void initDate(WebDataBinder binder) {
String pattern = "yyyy-MM-dd";
binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat(pattern), true));
}
二、Formatter的应用
内置的可扩展性;全局/局部;Source=String
实例一:
编写DateFormatter.java类:
package com.tyk.service.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<Date> { private String pattern; public DateFormatter(String pattern) {
this.pattern = pattern;
} @Override
public Date parse(String text, Locale locale) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(text);
} @Override
public String print(Date object, Locale locale) {
return object.toString();
}
}
配置文件spring-*.xml:
<mvc:annotation-driven conversion-service="dateFormatter"/>
<bean id="dateFormatter" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatters">
<set>
<bean class="com.tyk.service.formatter.DateFormatter">
<constructor-arg value="yyyy-MM-dd" type="java.lang.String"/>
</bean>
</set>
</property>
</bean>
实例二:
编写DateRegistrar.java类:
package com.tyk.service.formatter; import org.springframework.format.FormatterRegistrar;
import org.springframework.format.FormatterRegistry; public class DateRegistrar implements FormatterRegistrar {
private String pattern; public DateRegistrar(String pattern) {
this.pattern = pattern;
} @Override
public void registerFormatters(FormatterRegistry registry) {
registry.addFormatter(new DateFormatter(pattern));
}
}
配置文件spring-*.xml:
<mvc:annotation-driven conversion-service="dateRegistrar"/>
<bean id="dateRegistrar" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="formatterRegistrars">
<set>
<bean class="com.tyk.service.formatter.DateRegistrar">
<constructor-arg value="yyyy-MM-dd" type="java.lang.String"/>
</bean>
</set>
</property>
</bean>
三、Converter的应用
内置的不可扩展性;全局/局部;Source=自定义
实例:
编写DateConverter.java类
package com.tyk.service.converter; import org.springframework.core.convert.converter.Converter; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; public class DateConverter implements Converter<String, Date> {
private String pattern; public DateConverter(String pattern) {
this.pattern = pattern;
} @Override
public Date convert(String source) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
配置文件spring-*.xml:
<mvc:annotation-driven conversion-service="dateConverter"/>
<bean id="dateConverter" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="com.tyk.service.converter.DateConverter">
<constructor-arg value="yyyy-MM-dd" type="java.lang.String"/>
</bean>
</list>
</property>
</bean>
选择:
局部:PropertyEditor
全局: Web层:Formatter
全部层:Converter
比较:
Formatter的源类型必须是String,而Converter适用于任意的源类型
Formatter只能将String转换成另一种Java类型,例如,将Spring转换为Date,但是他不能将Long转换成Date。因此,Formatter适用于Web层。为此,在Spring MVC应用程序中,选择Formatter比选择Converter更合适。
PropertyEditor、Formatter、Converter的应用的更多相关文章
- springMVC的 Converter转换器 和 Formatter
Converter转换器 spring的Converter是可以将一种类型转换成另一种类型的一个对象, 自定义Converter需要实现Converter接口 日期转换器 import java.te ...
- spring类型自动转换——@InitBinder和Converter
spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...
- Springboot基础篇
Springboot可以说是当前最火的java框架了,非常适合于"微服务"思路的开发,大幅缩短软件开发周期. 概念 过去Spring充满了配置bean的xml文件,随着spring ...
- SpringBoot详细研究-01基础
Springboot可以说是当前最火的java框架了,非常适合于"微服务"思路的开发,大幅缩短软件开发周期. 概念 过去Spring充满了配置bean的xml文件,随着spring ...
- django时区设置以及全球用户如何各自显示当地时间
在Django的配置文件settings.py中,有两个配置参数是跟时间与时区有关的,分别是TIME_ZONE和USE_TZ 如果USE_TZ设置为True时,Django会使用系统默认设置的时区,即 ...
- python的日志模块:logging;django的日志系统;django日志输出时间修改
Django的log,主要是复用Python标准库中的logging模块,在settings.py中进行配置 源代码 1.__init__.py包含以下类: StreamHandler Formatt ...
- Locust 测试结果通过Matplotlib生成趋势图
目的: 相信大家对于使用Loadrunner测试后的结果分析详细程度还是有比较深刻的感受的,每个请求,每个事务点等都会有各自的趋势指标,在同一张图标中展示.如下图: 而Locust自身提供的chart ...
- 【Other】最近在研究的, Java/Springboot/RPC/JPA等
我的Springboot框架,欢迎关注: https://github.com/junneyang/common-web-starter Dubbo-大波-服务化框架 dubbo_百度搜索 Dubbo ...
- spring的2种类型转换器
spring有2种类型转换器,一种是propertyEditor,一种是Converter.虽然都是类型转换,但是还是有细微差别. 所以这里以一个例子的形式来分析一下这2种类型转换的使用场景和差别. ...
- Spring MVC -- 转换器和格式化
在Spring MVC -- 数据绑定和表单标签库中我们已经见证了数据绑定的威力,并学习了如何使用表单标签库中的标签.但是,Spring的数据绑定并非没有任何限制.有案例表明,Spring在如何正确绑 ...
随机推荐
- HDU 1426(数独 DFS)
题意是完成数独. 记录全图,将待填位置处填 0,记录下所有的待填位置,初始化结束.在每个待填位置处尝试填入 1 - 9,若经过判断后该位置可以填入某数字,则继续向下填下一个位置, 回溯时把待填位置重新 ...
- NOI-OJ 1.12 ID:10 素数对
整体思路 本题涉及大量素数的使用,故使用埃拉拖色尼算法提前计算出素数表可以避免大量.重复的计算. 判断素数对很简单,使用两个变量p1和p2代表素数表中的第一个和第二个素数,依次在表中向后移动,判断p2 ...
- 清除系统默认样式,文本样式,高级选择器(权重),边界圆角,a标签的四大伪类,背景图片
清除系统默认样式 大多系统预定义标签,有默认样式,不满足实际开发需求,反倒影响布局通常清除系统样式,利于开发 body,h1-h6,p,table { margin:; } ul { margin:; ...
- 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式
一. 背景 说起EF的增删改操作,相信很多人都会说,有两种方式:① 通过方法操作 和 ② 通过状态控制. 相信你在使用EF进行删除或修改操作的时候,可能会遇到以下错误:“ The object c ...
- requests.session
# -*- coding: utf-8 -*- """requests.session~~~~~~~~~~~~~~~~ This module provides a Se ...
- 运维工作笔记——基于centos7.3的多台服务期时间同步
1. 确认服务器版本 2.查看本机时间 3.可以同过date进行时间更改 4.yum安装ntp服务(服务端与客户端都需要安装) yum install -y ntp 5.在服务端192.1 ...
- 高并发秒杀系统--Service事务管理与继承测试
[Spring IoC的类型及应用场景] [Spring事务使用方式] [Spring事务的特性] [Spring事务回滚的理解] [Service声明式事务的配置] 1.配置事务管理器 2.配置基 ...
- throws与throw
throws与throw 1)throws出现在方法函数头:而throw出现在函数体: 2)throws表示出现异常的一种可能性,并不一定会发生这些异常:throw则是抛出了异常,执行throw ...
- 2.9 while循环
while循环 <1>while循环的格式 while 条件: 条件满足时,做的事情1 条件满足时,做的事情2 条件满足时,做的事情3 ...(省略)... demo i = 0 whil ...
- 分别基于TensorFlow、PyTorch、Keras的深度学习动手练习项目
×下面资源个人全都跑了一遍,不会出现仅是字符而无法运行的状况,运行环境: Geoffrey Hinton在多次访谈中讲到深度学习研究人员不要仅仅只停留在理论上,要多编程.个人在学习中也体会到单单的看理 ...