SpringMVC日期类型转换与格式化处理实践.pdfVIP

  • 0
  • 0
  • 约3.31千字
  • 约 3页
  • 2026-01-08 发布于北京
  • 举报

SpringMVC日期类型转换与格式化处理实践.pdf

通常,SpringMVC框架接收到请求后,会先进行(1)“类型转换”,再执行“验证、校验”。这个过程关系到系统的

稳定性、健壮性、安全性,所以比较重要。

类型转换

比较特殊的“日期转换”

以日期为例,表单文本框传过来的肯定是字符串,如果要试图将它对应到实体类的Date属性,那么会存在无法转

换的可能性。比如当文本框输的是2008-08-12,则spring尝试对应到Date类型的java变量时就会报400错。如果用美

国形式的写法2008/08/12就能正确。这说明springMVC有一定的转换能力但无法囊括所有写法。

为了解决这个问题,有一个简单的办法,就是使用@DateTimeFormate注解,

importorg.springframework.format.annotation.DateTimeFormat;

publicclassUser{

privateIntegerid;

privateStringname;

privateIntegerage;

@DateTimeFormat(pattern=yyyy-MM-dd)

privateDatebirthday;

。。。

}

经过实验发现能成功了,而且后续也能被mybatis存入到数据库的datetime字段了(从java的Date类型到数据库

的时间类型,数据框架肯定已经做了对应的处理)。使用这种办法开发时,在表单文本框处,使用一些日历控件,

并把它的格式设置成我们想要的写法。

另外,实际开发中,时间常常使用纯字符串方式。因为字符串是最通用的。即inputtype=”text”、java变量用String、

数据库字段用varchar。(网络传输本就是以字符串的形式向数据库系统传递命令的)。这也比较适合mybatis逆向工程。

通用的类型转换器:converter和formatter(格式化)

虽然spring框架自己会尽力做转换,比如形式的日期2001/3/12能够被成功转换到java的Date类型,或用

@DateTimeFormate来设置,但是如果我们想支持多种填写方式,@DateTimeFormate就不够用了,而必须更灵活

的解决办法,这就是我们现在要讲的自定义转换器。

⚫BindingResult

如果spring的自身尽力所做的转换失败,而程序员又没有匹配的转换器的话,那么框架直接向浏览器报

出错误信息“requestsentbytheclientwassyntacticallyincorrect.”。如果程序员给定了匹配的转换器,那么在spring

自己无法转换时就会尝试用此自定义转换器。

如果自定义转换器执行时发生转换错误而抛出异常,那么此异常的信息就会被添加进控制器方法的参数

(如果写了该参数的话),然后方法依然能够往下继续运行,只不过目标变量的值会为;倘若没

有写参数,则仍然向外(直到浏览器)报出错误信息。

要注意的是,控制器方法的参数一定要紧跟转换时的目标对象参数,因为约定了出错信息

是放到对象紧跟的变量中,否则若不紧跟的话,一旦出现异常,直接报错到一个“出错提示

页”出来而并不会去制作对象更不会往下执行了。

(另外,注解与类型转换也有些关联,具体可以阅读这两篇文章,

自定义转换器一般是实现的接口或接口。编程建议用,这是因为传

输肯定是字符串和其它类型之间转换,刚好设计成这样。而支持从任何类型到任何类型的转换。

一个从转换到的类的转换器可定义如下:

packagecom.qq.converter;

importjava.text.ParseException;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importorg.springframework.core.convert.converter.Converter;

publicclassStringToDateConverterimplementsConverterString,Date{

publicStringToDateCo

文档评论(0)

1亿VIP精品文档

相关文档