目录:
- 应用场景
- 实现方法
[一]、应用场景
在实际应用中,经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换,一般页面输入的日志格式为:yyyy-MM-dd ,而SpringMVC中默认不支持这样的格式转换,所以需要我们自定义数据类型的绑定才能实现这个功能。
[二]、实现方法
利用 WebBindingInitializer 注册自定义日期转换控制器。
自定义日期转换器:MyDataBinding.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
packagecom.micmiu.demo.web.v1.utils;
import java.text.SimpleDateFormat;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.support.WebBindingInitializer;
import org.springframework.web.context.request.WebRequest;
/**
* 自定义日期、时间的类型绑定
*
* @author <a href="http://www.micmiu.com">Michael Sun</a>
*/
publicclassMyDataBindingimplementsWebBindingInitializer{
publicvoidinitBinder(WebDataBinder binder,WebRequest request){
SimpleDateFormat dateFormat=newSimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
SimpleDateFormat datetimeFormat=newSimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
datetimeFormat.setLenient(false);
binder.registerCustomEditor(java.util.Date.class,newCustomDateEditor(
dateFormat,true));
binder.registerCustomEditor(java.sql.Timestamp.class,
newCustomTimestampEditor(datetimeFormat,true));
}
}
|
Timestamp 的实现:CustomTimestampEditor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
packagecom.micmiu.demo.web.v1.utils;
import java.beans.PropertyEditorSupport;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import org.springframework.util.StringUtils;
import java.text.ParseException;
/**
* Property editor for <code>java.sql.Timestamp</code>,<br>
* supporting a custom <code>java.text.DateFormat</code>.
*
* @author <a href="http://www.micmiu.com">Michael Sun</a>
*/
publicclassCustomTimestampEditorextendsPropertyEditorSupport{
privatefinalSimpleDateFormat dateFormat;
privatefinalbooleanallowEmpty;
privatefinalintexactDateLength;
publicCustomTimestampEditor(SimpleDateFormat dateFormat,booleanallowEmpty){
this.dateFormat=dateFormat;
this.allowEmpty=allowEmpty;
this.exactDateLength=-1;
}
publicCustomTimestampEditor(SimpleDateFormat dateFormat,
booleanallowEmpty,intexactDateLength){
this.dateFormat=dateFormat;
this.allowEmpty=allowEmpty;
this.exactDateLength=exactDateLength;
}
publicvoidsetAsText(Stringtext)throwsIllegalArgumentException{
if((this.allowEmpty)&&(!(StringUtils.hasText(text)))){
setValue(null);
}else{
if((text!=null)&&(this.exactDateLength>=0)
&&(text.length()!=this.exactDateLength)){
thrownewIllegalArgumentException(
"Could not parse date: it is not exactly"
+this.exactDateLength+"characters long");
}
try{
setValue(newTimestamp(this.dateFormat.parse(text).getTime()));
}catch(ParseException ex){
thrownewIllegalArgumentException("Could not parse date: "
+ex.getMessage(),ex);
}
}
}
publicStringgetAsText(){
Timestamp value=(Timestamp)getValue();
return((value!=null)?this.dateFormat.format(value):"");
}
}
|
修改spring-mvc 的配置文件,添加 webBindingInitializer 属性的注入配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<!--Spring3.1 之后的自定义注解 HandlerAdapter -->
<bean
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="webBindingInitializer">
<bean class="com.micmiu.demo.web.v1.utils.MyDataBinding" />
</property>
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="writeAcceptCharset"value="false" />
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>*/*;charset=UTF-8</value>
</list>
</property>
</bean>
<bean
class="org.springframework.http.converter.xml.SourceHttpMessageConverter" />
<bean
class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter" />
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
</list>
</property>
</bean>
|
这样就可以实现表单中的字符串自动转换为Date或者Timestamp 类型。
相关推荐
在SpringMVC中,数据绑定和数据类型转换是两个关键的概念,它们对于构建高效、健壮的Web应用至关重要。 **数据绑定**是SpringMVC中的一种机制,允许我们将用户通过表单或其他方式提交的请求参数自动绑定到控制器中...
在Spring MVC框架中,属性编辑器(PropertyEditor)和参数解析器(HandlerMethodArgumentResolver)是两个关键组件,用于处理数据转换和模型绑定的过程。它们是实现灵活性和扩展性的重要手段,尤其在处理用户输入...
为了更好地展示日期数据,可以使用自定义格式化器: ```java public class DateFormatter implements Formatter<Date> { private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); @Override...
在“扩展SpringMVC以支持更精准的数据绑定1”这个主题中,博主探讨了如何通过自定义转换器和验证器来增强Spring MVC的数据绑定能力,以满足更为复杂的应用场景。 首先,我们要了解Spring MVC的数据绑定基础。在默认...
通过这个"springmvc数据绑定示例程序",你可以学习到Spring MVC如何处理请求参数,如何将数据绑定到模型,以及如何在视图中展示这些数据。同时,它也涵盖了数据验证和自定义数据转换的使用,这些都是构建高效、健壮...
在这个名为"springmvc-demo05-数据绑定(接受参数)"的项目中,我们将深入探讨Spring MVC如何实现这一特性。 1. **数据绑定的基本概念** 数据绑定是将用户输入或者HTTP请求参数自动映射到Java对象的属性上的过程。...
在Controller类或方法上添加`@InitBinder`注解,可以在数据绑定之前设置自定义的转换器或者验证器。例如,如果我们希望对所有日期类型的参数都使用自定义格式,可以这样做: ```java @Controller public class ...
SpringMVC内建了许多内置的Converter,但在特定情况下,开发者可能需要自定义Converter来满足特定的数据转换需求,比如处理日期数据时。 SpringMVC支持多种类型的参数绑定: 1. **简单类型**:包括基本数据类型...
* 例如,定义一个将请求的日期数据串转换为 Java 中的日期类型的 Converter ConversionService * 提供了一种机制来将请求的参数转换为 Java 对象 * 可以通过注入 ConversionService 来实现自定义参数绑定
这个注解不仅用于数据绑定,还参与到数据验证过程中。例如: ```java @RequestMapping(method = RequestMethod.POST) public String submit(@Validated User user, BindingResult result) { if (result.hasErrors...
- **数据绑定(WebDataBinder)**:WebDataBinder负责将请求参数绑定到模型对象,同时进行类型转换和验证。 - **验证器(Validator)**:`Validator`接口提供了一种通用的验证机制,但Spring3引入了JSR-303/JSR-349...
首先,Spring MVC提供了注解驱动的数据绑定功能,能够自动处理基本类型的数据转换。但对日期类型,它需要额外的配置。以下是一些常用的方法: 1. **使用`@DateTimeFormat`注解**:如果你在控制业务逻辑的实体类中...
6. **转换器和格式化器**:SpringMVC允许自定义转换器和格式化器,用于处理不同类型的数据格式,如日期、货币等。 7. **数据绑定**:SpringMVC自动将HTTP请求参数绑定到Controller方法的参数上,反之亦然,将...
`@InitBinder`注解用于初始化数据绑定过程,我们可以在这个方法中添加自定义的日期格式化器。例如,我们可以创建一个全局的日期格式: ```java @Controller public class MyController { @InitBinder public ...
7. **转换与格式化**:SpringMVC支持自定义转换器和格式化器,用于处理不同类型的请求参数和响应数据,如日期、货币等的格式化。 8. **RESTful支持**:SpringMVC通过@RequestMapping的pathVariable、MatrixVariable...
* 可定制的绑定和验证:将类型不匹配作为应用级的验证错误,这可以保存错误的值,以及本地化的日期和数字绑定等 * 可定制的处理器映射和视图解析:灵活的模型可以根据名字/值映射,处理器映射和视图解析使应用策略从...
- 对于特殊类型的数据绑定需求,如日期类型,可以自定义实现`Converter`接口来实现特定类型的转换。例如,创建一个`Converter, Date>`实现类,将字符串类型的日期转换为Java中的`Date`对象。 - 将自定义的转换器...
4. **数据绑定**:Jetbrick-SpringMVC增强了SpringMVC的数据绑定能力,支持类型转换、验证和默认值设定,提高开发效率。 5. **异常处理**:提供了一套统一的异常处理机制,将系统异常转化为用户友好的错误页面,...
对于简单数据类型(如整型、字符串、日期),只要参数名匹配,SpringMVC会自动进行绑定。若参数名不一致,可以使用@RequestParam来指定。对于POJO类型,只要请求参数名与POJO属性名一致,SpringMVC会自动将请求参数...
8. **数据绑定** - SpringMVC自动将请求参数绑定到控制器方法的参数上,反之亦然。 9. **异常处理** - 可以全局或局部定义异常处理器,统一处理异常情况。 笔记部分可能会涵盖以上概念的详细解释和使用案例,...