SpringMVC自定义日期类型的数据绑定
来源:互联网 发布:sql增量备份还原 编辑:程序博客网 时间:2024/06/05 07:18
目录:
- 应用场景
- 实现方法
[一]、应用场景
在实际应用中,经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换,一般页面输入的日志格式为:yyyy-MM-dd ,而SpringMVC中默认不支持这样的格式转换,所以需要我们自定义数据类型的绑定才能实现这个功能。
[二]、实现方法
利用 WebBindingInitializer 注册自定义日期转换控制器。
自定义日期转换器:MyDataBinding.java
1
package
com.micmiu.demo.web.v1.utils;
2
3
import
java.text.SimpleDateFormat;
4
5
import
org.springframework.beans.propertyeditors.CustomDateEditor;
6
import
org.springframework.web.bind.WebDataBinder;
7
import
org.springframework.web.bind.support.WebBindingInitializer;
8
import
org.springframework.web.context.request.WebRequest;
9
10
/**
11
* 自定义日期、时间的类型绑定
12
*
13
* @author <a href="http://www.micmiu.com">Michael Sun</a>
14
*/
15
public
class
MyDataBinding
implements
WebBindingInitializer {
16
17
public
void
initBinder(WebDataBinder binder, WebRequest request) {
18
SimpleDateFormat dateFormat =
new
SimpleDateFormat(
"yyyy-MM-dd"
);
19
dateFormat.setLenient(
false
);
20
21
SimpleDateFormat datetimeFormat =
new
SimpleDateFormat(
22
"yyyy-MM-dd HH:mm:ss"
);
23
datetimeFormat.setLenient(
false
);
24
25
binder.registerCustomEditor(java.util.Date.
class
,
new
CustomDateEditor(
26
dateFormat,
true
));
27
binder.registerCustomEditor(java.sql.Timestamp.
class
,
28
new
CustomTimestampEditor(datetimeFormat,
true
));
29
}
30
}
Timestamp 的实现:CustomTimestampEditor.java
1
package
com.micmiu.demo.web.v1.utils;
2
3
import
java.beans.PropertyEditorSupport;
4
import
java.sql.Timestamp;
5
import
java.text.SimpleDateFormat;
6
import
org.springframework.util.StringUtils;
7
import
java.text.ParseException;
8
9
/**
10
* Property editor for <code>java.sql.Timestamp</code>,<br>
11
* supporting a custom <code>java.text.DateFormat</code>.
12
*
13
* @author <a href="http://www.micmiu.com">Michael Sun</a>
14
*/
15
public
class
CustomTimestampEditor
extends
PropertyEditorSupport {
16
17
private
final
SimpleDateFormat dateFormat;
18
private
final
boolean
allowEmpty;
19
private
final
int
exactDateLength;
20
21
public
CustomTimestampEditor(SimpleDateFormat dateFormat,
boolean
allowEmpty) {
22
this
.dateFormat = dateFormat;
23
this
.allowEmpty = allowEmpty;
24
this
.exactDateLength = -
1
;
25
}
26
27
public
CustomTimestampEditor(SimpleDateFormat dateFormat,
28
boolean
allowEmpty,
int
exactDateLength) {
29
this
.dateFormat = dateFormat;
30
this
.allowEmpty = allowEmpty;
31
this
.exactDateLength = exactDateLength;
32
}
33
34
public
void
setAsText(String text)
throws
IllegalArgumentException {
35
if
((
this
.allowEmpty) && (!(StringUtils.hasText(text)))) {
36
setValue(
null
);
37
}
else
{
38
if
((text !=
null
) && (
this
.exactDateLength >=
0
)
39
&& (text.length() !=
this
.exactDateLength)) {
40
throw
new
IllegalArgumentException(
41
"Could not parse date: it is not exactly"
42
+
this
.exactDateLength +
"characters long"
);
43
}
44
try
{
45
setValue(
new
Timestamp(
this
.dateFormat.parse(text).getTime()));
46
}
catch
(ParseException ex) {
47
throw
new
IllegalArgumentException(
"Could not parse date: "
48
+ ex.getMessage(), ex);
49
}
50
}
51
}
52
53
public
String getAsText() {
54
Timestamp value = (Timestamp) getValue();
55
return
((value !=
null
) ?
this
.dateFormat.format(value) :
""
);
56
}
57
}
修改spring-mvc 的配置文件,添加 webBindingInitializer 属性的注入配置:
1
<!--Spring3.1 之后的自定义注解 HandlerAdapter -->
2
<
bean
3
class
=
"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"
>
4
<
property
name
=
"webBindingInitializer"
>
5
<
bean
class
=
"com.micmiu.demo.web.v1.utils.MyDataBinding"
/>
6
</
property
>
7
<
property
name
=
"messageConverters"
>
8
<
list
>
9
<
bean
10
class
=
"org.springframework.http.converter.ByteArrayHttpMessageConverter"
/>
11
<
bean
12
class
=
"org.springframework.http.converter.StringHttpMessageConverter"
>
13
<
property
name
=
"writeAcceptCharset"
value
=
"false"
/>
14
<
property
name
=
"supportedMediaTypes"
>
15
<
list
>
16
<
value
>text/plain;charset=UTF-8</
value
>
17
<
value
>*/*;charset=UTF-8</
value
>
18
</
list
>
19
</
property
>
20
</
bean
>
21
<
bean
22
class
=
"org.springframework.http.converter.xml.SourceHttpMessageConverter"
/>
23
<
bean
24
class
=
"org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"
/>
25
<
bean
26
class
=
"org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
></
bean
>
27
</
list
>
28
</
property
>
29
</
bean
>
这样就可以实现表单中的字符串自动转换为Date或者Timestamp 类型。
本文介绍到此结束@Michael Sun.
原创文章,转载请注明: 转载自micmiu – 大大的技术 | 小小的生活[ http://www.micmiu.com/ ]
本文链接地址: http://www.micmiu.com/j2ee/spring/springmvc-binding-date/
- SpringMVC自定义日期类型的数据绑定
- SpringMVC自定义日期类型的数据绑定
- SpringMVC自定义日期类型的数据绑定
- springmvc自定义参数类型绑定
- 自定义日期类型的数据绑定 前台 - 后台 或 后台 - 前台 互相转换
- 自定义日期类型的数据绑定 前台 - 后台 或 后台 - 前台 互相转换
- springMVC数据绑定、类型转换
- springmvc 绑定枚举类型数据
- springmvc 绑定枚举类型数据
- springmvc-日期类型初始绑定报错
- SpringMVC自定义日期格式进行参数绑定
- springMVC接收日期类型参数的自定义转换
- SpringMVC接收日期类型参数的自定义转换
- springMVC接收日期类型参数的自定义转换
- SpringMVC 的数据绑定
- SpringMvc数据的绑定
- SpringMVC的数据绑定
- springMVC的数据绑定
- 【转】socket TCP_DEFER_ACCEPT
- 深入理解MSP430单片机IO
- 共享问题!
- NPAPI插件开发学习:NPAPI的介绍
- 面试题28:二叉树的深度
- SpringMVC自定义日期类型的数据绑定
- JFreechart Struts2 报表整合
- 查找(静态查找表)
- android JNI utils/Log.h 找不到 解决方法
- ZOJ 3228 找AC自动机找来的TRIE树
- Oracle merge into语句的行为
- 配置centos 4.4.7 服务器(2)
- 定义并启动线程
- 初识SOA(面向服务的体系结构)