天天看點

springmvc前後端日期類型的轉換

我們在做項目時通常會遇到,日期類型顯示到前端如果不加處理顯示出來就是date的long類型的毫秒值,很顯然如果我們使用jstl标簽可以使用格式化日期類型的标簽,如

<fmt:formatDate value="${sk.startTime }" pattern="yyyy-MM-dd HH:mm:ss"/>相信你已經會使用,但顯示使用jstl向頁面傳值比較少,一般使用json資料傳輸,傳到回調函數進行解析,js日期類型有幾個格式化函數toLocalString()轉化為本地期時間格式,toDateLocalString()轉化為本地日期格式,toTimeLocalString()轉化為本地時間格式,toUTCString()函數寫錯還是寫對不知道,大概印象,轉化為國際日期時間格式,本地日期時間格式比較雜亂,我們不使用,國際化很明顯看着就不爽。那麼我們可以在後端定義統一日期格式。

如下代碼

package cn.tedu.ttms.product.web;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

//自定義類實作JsonSerializer類
public abstract class JsonDateTypeConvert extends JsonSerializer<Date> {

	@Override
	/**
	 * 參數arg0 Date類型我們需要處理
	 * 參數arg2 JsonGenerator類型攜帶我們格式化後的字元串
	 */
	public void serialize(Date arg0, JsonGenerator arg1, SerializerProvider arg2)
			throws IOException, JsonProcessingException {
		//定義一個日期樣式模闆
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd");
		
		//根據模闆格式化日期
		String dateStr=simpleDateFormat.format(arg0);
		
		//寫入JsonGenerator
		arg1.writeString(dateStr);
		
	}

}
           

寫好怎麼使用呢我們隻需要注解@JsonSerialize放到entity實體類裡變量的get方法上如下

package cn.tedu.ttms.product.entity;

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import cn.tedu.ttms.product.web.JsonDateTypeConvert;

public class Project implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**項目的主鍵id*/
	private int id;
	
	/**項目名稱*/
	private String name;
	
	/**項目編号*/
	private String code;
	
	/**項目開始日期*/
	private Date beginDate;
	
	/**項目結束日期*/
	private Date endDate;
	
	/**項目狀态*/
	private Integer valid;
	
	/**項目備注*/
	private String note;
	
	/**記錄建立時間*/
	private Date createdTime;
	
	/**記錄修改時間*/
	private Date modifiedTime;
	
	/**記錄建立記錄的使用者資訊*/
	private String createdUser;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	@JsonSerialize(using=JsonDateTypeConvert.class)
	public Date getBeginDate() {
		return beginDate;
	}

	public void setBeginDate(Date beginDate) {
		this.beginDate = beginDate;
	}

	@JsonSerialize(using=JsonDateTypeConvert.class)
	public Date getEndDate() {
		return endDate;
	}

	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}

	public Integer getValid() {
		return valid;
	}

	public void setValid(Integer valid) {
		this.valid = valid;
	}

	public String getNote() {
		return note;
	}

	public void setNote(String note) {
		this.note = note;
	}

	public Date getCreatedTime() {
		return createdTime;
	}

	public void setCreatedTime(Date createdTime) {
		this.createdTime = createdTime;
	}

	public Date getModifiedTime() {
		return modifiedTime;
	}

	public void setModifiedTime(Date modifiedTime) {
		this.modifiedTime = modifiedTime;
	}

	public String getCreatedUser() {
		return createdUser;
	}

	public void setCreatedUser(String createdUser) {
		this.createdUser = createdUser;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	
	

}
           

這樣的話就可以自由使用了傳回到前端是就會自動轉換了

目前端的日期字元串類型要送出後端時我們也需要轉換,我們可以通過Springmvc的統一日期類型轉化來解決,看代碼

package com.drs.controller.converter;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.convert.converter.Converter;

/**
 * 将傳入的字元串轉化為java Data類型,不解釋,應該可以看懂
 * @author lenovo
 *
 */
public class CustomDateConverter implements Converter<String,Date>{

	public Date convert(String source) {
		
		//實作 将日期串轉成日期類型(格式是yyyy-MM-dd HH:mm:ss)
		
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
		
		//轉成直接傳回
		try {
			return simpleDateFormat.parse(source);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//如果參數綁定失敗傳回null
		return null;
	}

}
           

在springmvc.xml裡配置

<bean id="conversionService" 
	class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		<property name="converters">
			<list>
				<bean class="com.drs.controller.converter.CustomDateConverter"/>
			</list>
		</property>
	</bean>
           
OK!