SpringMVC對日期類型的轉換

  在作web開發的時候,頁面傳入的都是String類型,SpringMVC能夠對一些基本的類型進行轉換,可是對於日期類的轉換可能就須要咱們配置。前端

  一、若是查詢類使咱們本身寫,那麼在屬性前面加上@DateTimeFormat(pattern = "yyyy-MM-dd")  ,便可將String轉換爲Date類型,以下web

@DateTimeFormat(pattern = "yyyy-MM-dd")  
private Date createTime;  

  二、若是咱們只負責web層的開發,就須要在controller中加入數據綁定:spring

1 @InitBinder  
2 public void initBinder(WebDataBinder binder) {  
3 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");  
4 dateFormat.setLenient(false);  
5 binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));   //true:容許輸入空值,false:不能爲空值 

  三、能夠在系統中加入一個全局類型轉換器json

  實現轉換器mvc

 1 public class DateConverter implements Converter<String, Date> {    
 2 @Override    
 3 public Date convert(String source) {    
 4     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");    
 5     dateFormat.setLenient(false);    
 6     try {    
 7         return dateFormat.parse(source);    
 8     } catch (ParseException e) {    
 9         e.printStackTrace();    
10     }           
11     return null;    
12 }    

  進行配置:app

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">    
        <property name="converters">    
            <list>    
                <bean class="com.doje.XXX.web.DateConverter" />    
            </list>    
        </property>    
</bean> 
<mvc:annotation-driven conversion-service="conversionService" />  

  四、若是將日期類型轉換爲String在頁面上顯示,須要配合一些前端的技巧進行處理。ide

  五、SpringMVC使用@ResponseBody返回json時,日期格式默認顯示爲時間戳。this

 1 @Component("customObjectMapper")  
 2 public class CustomObjectMapper extends ObjectMapper {  
 3   
 4     public CustomObjectMapper() {  
 5         CustomSerializerFactory factory = new CustomSerializerFactory();  
 6         factory.addGenericMapping(Date.class, new JsonSerializer<Date>() {  
 7             @Override  
 8             public void serialize(Date value, JsonGenerator jsonGenerator,  
 9                     SerializerProvider provider) throws IOException, JsonProcessingException {  
10                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
11                 jsonGenerator.writeString(sdf.format(value));  
12             }  
13         });  
14         this.setSerializerFactory(factory);  
15     }  
16 }  

  配置以下:spa

<mvc:annotation-driven>  
    <mvc:message-converters>  
        <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
            <property name="objectMapper" ref="customObjectMapper"></property>  
        </bean>  
    </mvc:message-converters>  
</mvc:annotation-driven>  

  六、date類型轉換爲json字符串時,返回的是long time值,若是須要返回指定的日期的類型的get方法上寫上@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") ,便可將json返回的對象爲指定的類型。code

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")  
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")  
public Date getCreateTime() {  
return this.createTime;  
}  
相關文章
相關標籤/搜索