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

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


你可能感兴趣的:(java中模型转json对象时,时间属性格式不正确问题的解决)