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在如何正确绑 ...
随机推荐
- 编写高质量的Python代码系列(一)之用Pythonic方式来思考
Python开发者用Pythonic这个形容词来描述具有特定风格的代码.这种风格是大家在使用Python语言进行编程并相互协作的过程中逐渐形成的习惯.那么,如何以改风格完成常见的Python编程工作呢 ...
- C++回顾day03---<异常>
一:传统错误处理机制(C中通过函数返回来处理) int CalcRes(int n, int m, char ch, int& res) { ; switch (ch) { case '+': ...
- C++回顾day03---<类型转换>
一:C++类型转换 (一)static_cast<>() 静态类型转换:基本类型可以转换但是指针类型不允许.可以进行隐式类型转换 double n=1.23 int m=static_ca ...
- 第八节: EF的性能篇(一) 之 EF自有方法的性能测试
一. 开发中常见的性能问题 我们在日常开发过程中,由于一些不好的习惯,经常会导致所写的代码性能低下,却毫无发觉,下面就总结一下常见的一些性能问题. 1. 真假分页 ① 假分页: db.xxx.toLi ...
- MySQL的一些基本命令笔记(4)
delete 语句嵌套子查询: delete from 表名1 where 列名 操作符 (select 列名 from 表名2 where 条件); 示例: delete from customer ...
- 同步Name到Comment 及 同步 Comment 到Name
在 PowerDesigner执行命令 Tools->Execute Commands->Edit/Run Scripts 代码一:将Name中的字符COPY至Comment中 Opti ...
- shell 批量检测远程端口
[DNyunwei@YZSJHL24-209 li]$ cat port.sh #!/bin/bash # ip=`cat iplist` for i in $ip;do port=`ssh -t $ ...
- 设计模式五: 原型模式(Prototype)
简介 原型模式是属于创建型模式的一种,是通过拷贝原型对象来创建新的对象. 万能的Java超类Object提供了clone()方法来实现对象的拷贝. 可以在以下场景中使用原型模式: 构造函数创建对象成本 ...
- Django模型层-多表操作
多表操作 一.创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是 ...
- unity读取txt,并且生成vector3的数组
读取txt的脚本: public void ReadFileTX(){ var str = File.ReadAllText(Application.streamingAssetsPath + &qu ...