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

来源:互联网 发布:知乎主要用户群体 编辑:程序博客网 时间:2024/05/28 14:57

模型转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());


0 0
原创粉丝点击