在 Spring3.0 以前大部分會用 MappingJackson 對 Json 格式數據做轉化,Spring3.0 以后很多在使用 MappingJackson2 對 Json 格式數據做轉化,但MappingJackson2 如果不對日期格式的數據做處理,傳到前台的數據是 Long 類型的數據。
網上對 MappingJackson2 的日期格式轉化有很多辦法,Jackson2自帶的就有注解方式,還有通過配置 XML 進行轉換的,我都一一進行了測試,通過配置 XML 是通過對 ObjectMapper 更改達成目的,但會有一個問題,就是向前台傳送字符串會自動給數據加上斜杠,當然如果全部傳對象的話,是不存在這個問題。但有時向前台傳字符串是不可避免的。有斜杠看着很不舒服。
我現在是通過使用 ObjectMapper 對象,做了一個工具類,向前台返回時,把所有的對象轉換成字符串或 Map / List 類型數據。代碼如下:
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class JsonConvertUtils {
private static final Long serialVersionUID = 1L;
private static final ObjectMapper jsonMap = new ObjectMapper();
/**
* @description 對象轉成字符串
* @param object
* @return
*/
public static String objectConvertStringForDate(Object object) {
try {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonMap.setDateFormat(sdf);
return jsonMap.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
/**
* 轉List/Map類型的數據,單個實體類不要用此方法,轉回去之后還是會顯示Long類型日期
* @param cal
* @return 對象
*/
public static Object objectConvertDate(Object cal) {
try {
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
jsonMap.setDateFormat(sdf);
String returnValue = jsonMap.writeValueAsString(cal);
return jsonMap.readValue(returnValue,cal.getClass());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
有不對的地方望大家指正
