- 浏览: 133143 次
- 性别:
- 来自: 广州
-
文章分类
最新评论
-
newhxj:
03-21 10:56:35.850: E/Web Conso ...
Android简易Flash播放器[转] -
roiz:
谢谢 很好正需要这资料
精确监听AbsListView滚动至底部[转]
转至http://linksc.iteye.com/blog/1112581
在2009年,Spring Framework 3.0发布了,带来了很多新的功能强大的特性。 除了支持RESTful Web service的Spring Expression Language(SpEL)等主要功能外,还有一些很方便的,而且不需要太多时间学习的新的特性。这里我们介绍其中的一个:用于格式化的注解。
简介
Spring 3 提供了两个可以用于格式化数字、日期和时间的注解@NumberFormat和@DateTimeFormat,这两个标签可以用于bean的属性或方法参数上。@NumberFormat可以用来格式化任何的数字的基本类型(如int,long)或java.lang.Number的实例(如 BigDecimal, Integer)。@DateTimeFormat可以用来格式化java.util.Date、java.util.Calendar和 java.util.Long类型,也可以用于Joda Time类型的字段或参数。(Joda Time是一个开源的包,提供了对date和time类的一些替代类)。
要指定数字或日期/时间类型的属性,只需要在其上添加 @NumberFormat或@DateTimeFormat注解接可以了。例如下面的代码:
import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import org.joda.time.LocalTime; public class Employee { private String name; private double salary; private double w4AdditionalWithdraw; private int dependents; private BigDecimal visualAcuity; private Date birthDate; private Calendar hireDate; private LocalTime startTime; private long lastTimeEntry; /** * initialization block to provide sample data for display */ { this.name = "John Doe"; this.salary = 30100.50; this.w4AdditionalWithdraw = 0.02; this.dependents = 5; this.visualAcuity = new BigDecimal(".1"); Calendar dob = Calendar.getInstance(); dob.set(1964, Calendar.AUGUST, 30); this.birthDate = dob.getTime(); this.hireDate = Calendar.getInstance(); this.startTime = new LocalTime(8, 0); this.lastTimeEntry = (new Date()).getTime() - 10000; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public double getW4AdditionalWithdraw() { return w4AdditionalWithdraw; } public void setW4AdditionalWithdraw(double w4AdditionalWithdraw) { this.w4AdditionalWithdraw = w4AdditionalWithdraw; } public int getDependents() { return dependents; } public void setDependents(int dependents) { this.dependents = dependents; } public BigDecimal getVisualAcuity() { return visualAcuity; } public void setVisualAcuity(BigDecimal visualAcuity) { this.visualAcuity = visualAcuity; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public LocalTime getStartTime() { return startTime; } public void setStartTime(LocalTime startTime) { this.startTime = startTime; } public Calendar getHireDate() { return hireDate; } public void setHireDate(Calendar hireDate) { this.hireDate = hireDate; } public long getLastTimeEntry() { return lastTimeEntry; } public void setLastTimeEntry(long lastTimeEntry) { this.lastTimeEntry = lastTimeEntry; } }
这段代码中我们没有添加注解。如果我们使用Spring 份额Form 标签将这个bean中的数据用于显示的时候,我们会得到类似下图的结果:
可以看到,所有的数据都是以默认的格式显示的,Spring会使用默认的格式将数据显示在HTML表格中(其他的框架也大多如此)。如果想显示特殊的格式,开发人员必须编写特殊的getter/setter方法或使用PropertyEditors来显示特殊格式的数字或者日期/时间。
现在有了 @NumberFormat和@DateTimeFormat注解,我们可以使用这两个注解来完成同样的功能。如下面的代码所示:
import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import org.joda.time.LocalTime; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.NumberFormat; import org.springframework.format.annotation.DateTimeFormat.ISO; import org.springframework.format.annotation.NumberFormat.Style; public class Employee { private String name; /** * numeric fields using @NumberFormat annotation for formatting. */ @NumberFormat(style = Style.CURRENCY) private double salary; @NumberFormat(style = Style.PERCENT) private double w4AdditionalWithdraw; @NumberFormat private int dependents; @NumberFormat(pattern = "0.00") private BigDecimal visualAcuity; /** * date and time fields using @DateTimeFormat annotation for formatting. */ @DateTimeFormat(style = "M-") private Date birthDate; @DateTimeFormat(pattern = "w:yyyy") private Calendar hireDate; @DateTimeFormat(style = "-S") private LocalTime startTime; @DateTimeFormat(iso = ISO.DATE_TIME) private long lastTimeEntry; /** * initialization block to provide sample data for display */ { this.name = "John Doe"; this.salary = 30100.50; this.w4AdditionalWithdraw = 0.02; this.dependents = 5; this.visualAcuity = new BigDecimal(".1"); Calendar dob = Calendar.getInstance(); dob.set(1964, Calendar.AUGUST, 30); this.birthDate = dob.getTime(); this.hireDate = Calendar.getInstance(); this.startTime = new LocalTime(8, 0); this.lastTimeEntry = (new Date()).getTime() - 10000; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public double getW4AdditionalWithdraw() { return w4AdditionalWithdraw; } public void setW4AdditionalWithdraw(double w4AdditionalWithdraw) { this.w4AdditionalWithdraw = w4AdditionalWithdraw; } public int getDependents() { return dependents; } public void setDependents(int dependents) { this.dependents = dependents; } public BigDecimal getVisualAcuity() { return visualAcuity; } public void setVisualAcuity(BigDecimal visualAcuity) { this.visualAcuity = visualAcuity; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public LocalTime getStartTime() { return startTime; } public void setStartTime(LocalTime startTime) { this.startTime = startTime; } public Calendar getHireDate() { return hireDate; } public void setHireDate(Calendar hireDate) { this.hireDate = hireDate; } public long getLastTimeEntry() { return lastTimeEntry; } public void setLastTimeEntry(long lastTimeEntry) { this.lastTimeEntry = lastTimeEntry; } }
当在页面上显示的时候,我们会直接得到我们想要的格式,如下图所示:
注解的可选属性
注解的属性决定了@NumberFormat和@DateTimeFormat注解怎样格式化相应的属性。 @NumberFormat注解有两个可选的属性:style和pattern。style属性是一个NumberFormat.Style枚举值,可以是以下的三个值之一:
注解的可选属性
注解的属性决定了@NumberFormat和@DateTimeFormat注解怎样格式化相应的属性。 @NumberFormat注解有两个可选的属性:style和pattern。style属性是一个NumberFormat.Style枚举值,可以 是以下的三个值之一:
NumberFormat.Style 枚举值 |
是否缺省值 |
NUMBER | 是 |
CURRENCY | 否 |
PERCENT | 否 |
这 3种style的应用我们在上面的代码中都有相应的例子。
具体的style的表现形式是与区域相关的。例如,一个double类型的字段,如果style是CURRENCY,那么在en-us的区域显示的时候前面会加上$,在zh-cn的区域显示的时候前面会加上¥。
如果以上的3中方式无法满足需求,我们可以使用pattern属性来指定特殊的输出格式。Pattern的值要遵循Java标准的numeric formatting pattern。对于@NumberFormat来说缺省的是没有pattern的。
@DateTimeFormat 注解有3个可选的属性:style,pattern和iso。属性style允许我们使用两个字符的字符串来表明怎样格式化日期和时间。第一个字符表明了 日期的格式,第二个字符表明了时间的格式。下面的表格中列出了可用的选择以及相应的输出的例子:
描述 | 字符串值 | 示例输出 |
短格式(这是缺省值) | SS |
8/30/64 11:24 AM |
中等格式 | MM | Aug 30, 1964 11:24:41 AM |
长格式 | LL |
August 30, 1964 11:24:41 AM CDT |
完整格式 | FF | Sunday, August 30, 1964 11:24:41 AM CDT |
使用短横线省略日期或时间 | M- | Aug 30, 1964 |
Pattern 属性允许我们使用自定义的日期/时间格式。该属性的值遵循java标准的date/time格式规范。缺省的该属性的值为空,也就是不进行特殊的格式化。
最后,可以使用org.springframework.format.annotation.DateTimeFormat.ISO枚举值来使用ISO标准的日期/时间格式来格式化。下面的表格中列出了可能的值和相应的输出
ISO枚举值 |
输出 |
DATE | 2000-10-31 |
TIME | 01:30:00.000-05:00(最后的是时区) |
DATE_TIME | 2000-10-31 01:30:00.000-05:00. |
NONE | 不进行ISO标准的格式化 |
使用格式化注解的设置
要使用上面介绍的格式化注解,需要进行如下的配置:
1.下载Spring 3.0的jar包并加入到类路径中。
2. 将下面的配置信息加入到spring bean的XML配置文件中。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <mvc:annotation-driven /> </beans>
解析参数
我们也可以使用这些注解来告诉Spring怎样解析输入的数据。下面的例子显示了怎样使用@DateTimeFormat来解析以ISO格式输入的时间信息:
public String getEmployeesOnTheClock(@DateTimeFormat(iso=ISO.TIME) java.util.Date time) { ... }
发表评论
-
Java基于Socket文件传输示例[转]
2012-11-21 17:58 757最近需要进行网络传输大文件,于是对基于socket的文件传输作 ... -
Java基础:三步学会Java Socket编程3[转]
2012-11-21 17:17 857第三步 实现信息共享:在Socket上的实时交流 网络的 ... -
Java基础:三步学会Java Socket编程2[转]
2012-11-21 17:15 741第二步 多个客户同时连接 在实际的网络环境里,同一时间只 ... -
Java基础:三步学会Java Socket编程1[转]
2012-11-21 17:12 875第一步 充分理解Socket ... -
一步步优化JVM七:其他[转]
2012-11-10 23:37 1089边缘问题 在某 ... -
一步步优化JVM六:优化吞吐量[转]
2012-11-07 00:23 7102如果你已经进行 ... -
一步步优化JVM五:优化延迟或者响应时间(3)[转]
2012-11-07 00:20 6711CMS垃圾回收器周期 一旦young的空 ... -
一步步优化JVM五:优化延迟或者响应时间(2)[转]
2012-11-07 00:13 1616优化CMS(concurrent garbage col ... -
一步步优化JVM五:优化延迟或者响应时间(1)[转]
2012-11-06 23:35 1143本节的目标是做 ... -
一步步优化JVM四:决定Java堆的大小和内存占用[转]
2012-11-06 19:21 1214到目前为止,还没有做明确的优化工作。只是做了初始 ... -
一步步优化JVM三:GC优化基础[转]
2012-11-06 18:52 1171本节主要描述关于垃圾回收器性能的三个指标,三 ... -
一步步优化JVM二:JVM部署模型和JVM Runtime[转]
2012-11-06 18:27 1249选择JVM部署模型 JVM部署模型的选择总体来说 ... -
一步步优化JVM(一)——概述[转]
2012-11-06 18:04 1267现代JVM是一个具有灵活适应各种应用能力的软件,尽 ... -
Filter的用法[转]
2012-10-03 22:01 873filter过滤器主要使用于前台向后台传递数据是的过滤操 ... -
Spring Aop 日志管理[转]
2012-07-14 01:54 1840Spring Aop 日志管理 Sp ... -
Hibernate的ID生成策略/联合主键解决方案[转]
2012-06-27 00:22 883转至http://blog.163.com/fengz ... -
HibernateTemplate Callback 2
2012-06-26 23:46 706package com.bee.common.hiber ... -
HibernateTemplate Callback
2012-06-26 23:45 843package com.bee.common.hiber ... -
Spring管理Hibernate事务[转]
2012-06-26 22:56 8561.TransactionProxyFactoryBean ... -
OpenSessionInViewFilter、Session、HibernateTemplate[转]
2012-06-26 22:51 2688从书上我了解到Session接 ...
相关推荐
Spring MVC Annotation验证方法 Spring MVC 框架提供了多种验证方法,其中一种常用的方式是使用Annotation验证。本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和...
`MappingJackson2HttpMessageConverter`是Spring MVC中用于处理JSON数据的典型转换器。这个转换器依赖于Jackson库,能够将Java对象转换为JSON字符串,以及将JSON字符串解析为Java对象。在配置文件中,我们需要声明这...
12. **@InitBinder**: 这个注解可以用于初始化数据绑定行为,例如设置日期格式或忽略某些字段。 13. **@Async**: 如果你需要异步处理请求,可以使用这个注解标记方法,Spring将会以非阻塞方式调用该方法。 以上...
总的来说,通过结合使用Spring和Hibernate的注解,开发者可以创建出简洁、模块化的Java应用,减少繁琐的配置,提升开发效率。这个"springAndHibernateAnnotation"项目提供了一个很好的学习平台,新手可以通过实践...
在Spring MVC框架中,`mvc:annotation-driven`是Spring MVC配置中的一个重要元素,它使得我们的应用能够支持基于注解的控制器、数据绑定、格式化转换器和服务端验证等功能。这篇博客将深入探讨`mvc:annotation-...
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <!-- 添加Jackson的HttpMessageConverter --> <bean class="org.springframework....
在Spring Boot中处理JSON数据的时间格式化是一个常见的需求,尤其是当后端需要与前端或其他服务通过JSON格式交换日期时间数据时。为了满足不同场景下对时间格式的要求,开发者可以使用Jackson库提供的注解来解决这一...
Spring定时器,也被称为Spring Boot的定时任务,是Spring框架中的一个强大功能,它允许开发者在应用程序中安排周期性...通过合理配置和使用,我们可以轻松地将定时任务集成到Spring Boot应用中,实现自动化的工作流。
Java开发中,`jar`包是Java Archive的缩写,是一种可执行的文件格式,用于封装Java类库,包括`.class`文件和其他资源。在本例中,我们关注的`jar`包是`javax.annotation.zip`,它包含了`javax.annotation`相关的API...
在Spring MVC中,数据格式化是处理数据展示和输入的重要环节。`Converter` 和 `Formatter` 是Spring MVC提供的两种工具,它们允许我们自定义类型转换,以满足特定的数据格式要求。 `Converter` 是用于在任何 `...
表达式语言(Expression Language)是Spring MVC中用于访问数据和处理逻辑的工具,它提供了一种机制,允许在XML配置和视图模板中使用表达式来获取数据。表达式语言的运用,使得页面渲染更加动态和灵活。 本书适合...
4. 国际化支持:Spring MVC还考虑到了国际化需求,允许你根据用户的语言环境(locale)来调整日期的格式。这可以通过定义不同的日期格式模板并在服务器端进行动态选择来实现。 5. 错误处理:如果自动转换失败,...
此外,它还包含了对数据绑定、验证、格式化等功能的支持。 例如,当我们在一个类上使用`@RestController`注解时,Spring MVC会自动识别这个类为RESTful服务的控制器,并处理其中的方法。方法上的`@RequestMapping`...
运行时处理则是JVM在运行时读取注解并采取行动,例如Spring框架中的依赖注入就是通过运行时注解处理实现的。 `annotation-1.4.14.jar`这个库可能包含了自定义注解的实现以及对应的处理器,使得开发者能够扩展Java...
然后,在Spring的配置文件中,我们可以通过`<mvc:annotation-driven>`标签启用HTTP消息转换器支持,这样Spring MVC会自动处理JSON的序列化和反序列化。 3. **模型绑定和JSON输入** 当前端向后端发送JSON数据时,...
4. **数据转换和格式化**:`<mvc:annotation-driven/>`还会自动注册一些数据转换器和服务,如`StringToXXXConverter`,用于将请求参数转换为合适的对象类型。同时,它也支持自定义转换器和格式化器,以便处理特定的...
与之配套的是Jackson库,这是一款高效的JSON处理库,常用于Spring MVC应用中进行数据序列化和反序列化。 在使用Spring Framework 4.3.8时,确保你的Java Development Kit (JDK)版本至少是1.8。这是由于Spring框架4....
Jackson包是Java开发中用于处理JSON数据的热门库,尤其在Spring框架中有着广泛的应用。在Spring 4.X版本中,Jackson成为了默认的JSON库,因为它提供了高效且灵活的序列化和反序列化机制。本篇文章将深入探讨Jackson...
Spring MVC的配置通常在`web.xml`中初始化DispatcherServlet,这是处理所有HTTP请求的前端控制器。接着,我们会在`spring-servlet.xml`或对应的配置类中定义拦截器、视图解析器、消息转换器等关键组件。例如,使用`...
Spring框架中的注解支持AOP,如@Transactional,用于声明式事务管理。 六、实际应用案例 6.1 Spring框架 Spring的@Component、@Service、@Repository 和 @Controller 等注解用于组件扫描,实现依赖注入。 6.2 JPA...