您的位置:首页 > 编程语言 > Java开发

java中模型转json对象时,时间属性格式不正确问题的解决

2017-04-05 09:23 567 查看
模型转json对象,在实际编码中的运用应该是很频繁的。

常用的包有Gson、net.sf.json等。

在使用net.sf.json的fromObject()方法时,Date日期格式的属性总会被转成year-mouth-day等可读性很差的格式,而我们想要的格式一般应该是:“yyyy-MM-dd HH:mm:ss”或者long类型,那么应该怎么处理呢?

利用JsonObject和JsonArray的重载方法:

public static JSONArray fromObject(Object object, JsonConfig jsonConfig)
利用这个方法,我们就能指定某类型的数据按照我们想要的格式去处理。

以日期格式为例:

新建一个类MyJsonConfig,继承自JsonConfig类,在类的构造方法中,调用

public void registerJsonValueProcessor(Class propertyType, JsonValueProcessor jsonValueProcessor)
方法来注册一个类型处理器,我们把Date类型处理器的名称定为:

class JsonDateValueProcessor implements JsonValueProcessor
然后我们实现JsonValueProcessor接口的方法:

@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return this.process(o);
}

@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return this.process(o);
}

private Object process(Object value) {

if (value instanceof Date) {

if (type.equals(Long.class)) {
return ((Date)value).getTime();
} else if (type.equals(String.class)) {
SimpleDateFormat sdf = new SimpleDateFormat(this.dateFormat);
return sdf.format(value);
}
}
return value == null ? "" : value.toString();
}
综上,一个完整的MyJsonConfig类的实现如下:

package cn.xxx.tech.utils.JSON;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

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

public class MyJsonConfig extends JsonConfig {

class JsonDateValueProcessor implements JsonValueProcessor {

private final String dateFormat ="yyyy-MM-dd HH:mm:ss";

private Class type;

public JsonDateValueProcessor (Class type) {
this.type = type;
}

public JsonDateValueProcessor() {
this.type = String.class;
}

@Override
public Object processArrayValue(Object o, JsonConfig jsonConfig) {
return this.process(o);
}

@Override
public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) {
return this.process(o);
}

private Object process(Object value) {

if (value instanceof Date) {

if (type.equals(Long.class)) {
return ((Date)value).getTime();
} else if (type.equals(String.class)) {
SimpleDateFormat sdf = new SimpleDateFormat(this.dateFormat);
return sdf.format(value);
}
}
return value == null ? "" : value.toString();
}
}

public MyJsonConfig(Class type) {
super();
this.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor(type));
}

public MyJsonConfig() {
super();
this.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor(String.class));
}
}
使用方法:

JSONArray dataJsonArray = JSONArray.fromObject(resultList, new MyJsonConfig());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐