<bean id="dateFormat" class="java.text.SimpleDateFormat"> <constructor-arg value="yyyy-MM-dd" /> </bean> <bean id="user" class="zxy.demo.springmvc.domain.UserInfo"> <constructor-arg value="10" /> <constructor-arg index="1" value="名字" /> <constructor-arg index="2"> <bean factory-bean="dateFormat" factory-method="parse"> <constructor-arg value="2016-12-19" /> </bean> </constructor-arg> </bean>
做用於單個實體,用於xml文件配置。html
這是一個註解,完整類名是org.springframework.format.annotation.DateTimeFormat
,用於http請求入參
,只能做用於具體的實體對象,以下java
@DateTimeFormat(pattern="yyyy-MM-dd")
只用於http請求入參
,做用於全局,可搭配@Controller
和@ControllerAdvice
使用,以下web
@ControllerAdvice public class MyControllerAdvice { @InitBinder public void initDate(WebDataBinder binder) { // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH"); // dateFormat.setLenient(false); // binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false)); binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd")); // Spring 4.2以後的寫法 } }
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <set> <bean class="zxy.demo.springmvc.converter.DateConverter"/> </set> </property> </bean> <mvc:annotation-driven conversion-service="conversionService"/>
public class DateConverter implements Converter<String, Date> { @Override public Date convert(String source) { // ... } }
DateConverter
是一個自定義類,實現接口org.springframework.core.convert.converter.Converter
,重寫convert()方法便可。做用於全局,用於http請求入參
。spring
前面說的日期處理,沒有一種是用於請求返回
的,若是是要返回數據,而且使用json進行系列化的,那麼SpringMVC支持的有jackson跟Gson,具體要看引入了哪一個jar包,若是兩個引入了,那麼將以jackson爲準,具體可看org.springframework.web.servlet.config.AnnotationDrivenBeanDefinitionParser
這個類,關鍵看兩個成員變量jackson2Present
跟gsonPresent
,這是兩個boolean值,根據這兩個成員變量看關聯的代碼便可。json
注:因爲通常接口返回的數據是json格式的,因此jackson跟Gson這兩個包確定是要引入一個的,否則請求會報錯,如「org.springframework.core.convert.ConversionFailedException: Failed to convert from type xxx to type xxx for ...」,這時候引入兩個包之中的一個就能夠讓對象序列化爲Json進行傳輸了。同理xml格式的序列化也可參考AnnotationDrivenBeanDefinitionParser
這個類進行相應的配置。mvc
注:下面的代碼是基於Spring 4.3.8.RELEASE,其餘版本應該也相似。app
這是一個註解,完整類名是com.fasterxml.jackson.annotation.JsonFormat
,只能用於http請求返回
,只能做用於具體的實體對象,以下dom
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
做用於全局,只用於請求返回
。ide
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper" > <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean" p:simpleDateFormat="yyyy-MM-dd HH:mm:ss" /> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
做用於全局,只用於請求返回
。code
<mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.GsonHttpMessageConverter"> <property name="gson"> <bean class="org.springframework.http.converter.json.GsonFactoryBean" p:dateFormatPattern="yyyy-MM-dd HH:mm:ss" /> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
若是做用域單個的跟做用於全局的都配置了,那麼配置單個實體的將最終生效而不會用全局的配置。
對於使用message-converters
的方式,若是還須要更多的配置參數,能夠看spring-webmvc的AnnotationDrivenBeanDefinitionParser
這個類跟spring-web的org.springframework.http.converter.json
包下的類便可。
更多的日期時間處理方式,可參考官方文檔。