在JAVA中,经常会用到json-lib来对bean进行序列化与反序列化,但其默认的Date类型的序列化与反序列化格式往往与我们需要的不一致,需要进行处理。
1)Java Bean序列化为Json字符串
写一个日期处理转换类工具,实现JsonValueProcessor接口
public class DateJsonValueProcessorUtil implements JsonValueProcessor {
/**
* datePattern
*/
private String datePattern = "yyyy-MM-dd";
public static String DATE_FORMAT = "yyyy-MM-dd";
// 长日期格式
public static String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
// 长日期格式 精确到毫秒
public static String LONG_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss SSS";
/**
* JsonDateValueProcessor
*/
public DateJsonValueProcessorUtil() {
super();
}
/**
* @param format
*/
public DateJsonValueProcessorUtil(String format) {
super();
this.datePattern = format;
}
/**
* @param value
* @param jsonConfig
* @return Object
*/
public Object processArrayValue(Object value, JsonConfig jsonConfig) {
return process(value);
}
/**
* @param key
* @param value
* @param jsonConfig
* @return Object
*/
public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
return process(value);
}
/**
* process
*
* @param value
* @return
*/
private Object process(Object value) {
try {
if (value instanceof Date) {
SimpleDateFormat sdf = new SimpleDateFormat(datePattern, Locale.UK);
return sdf.format((Date) value);
}
return value == null ? "" : value.toString();
} catch (Exception e) {
return "";
}
}
/**
* @return the datePattern
*/
public String getDatePattern() {
return datePattern;
}
/**
* @param pDatePattern
* the datePattern to set
*/
public void setDatePattern(String pDatePattern) {
datePattern = pDatePattern;
}
}
在需要序列化的地方使用JsonConfig
JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(false);
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessorUtil(DateJsonValueProcessorUtil.DATE_FORMAT));
JSONObject jsonObject = JSONObject.fromObject(userLogin,config);
2)JSON字符串转换为Java Bean
String[] dateFormats = new String[] {"yyyy-MM-dd HH:mm:ss"};
JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));
MkHgwg mkHgwg = (MkHgwg)JSONObject.toBean(jsonObj, MkHgwg.class);