欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot @JsonDeserialize自定义Json序列化方式

程序员文章站 2022-06-17 19:40:40
目录@jsondeserialize自定义json序列化@jsonserialize与@jsondeserialize使用@jsondeserialize自定义json序列化1.问题在项目上使用spr...

@jsondeserialize自定义json序列化

1.问题

在项目上使用springboot为框架,调用第三方接口时,返回的参数date类型,需要自定义进行json序列化,需要进行处理,接受数据

2.现象

调用第三方接口,返回参数类型为date类型,格式如下:

{
    "created": "2018-12-27 16:15:25",
    "lastupd": "2018-12-27 08:25:48"
}

返回date类型数据格式为:yyyy-mm-dd hh:mm:ss,json默认序列化date类型参数,格式为:yyyy-mm-dd hh:mm:ss.sss,则需要自定义进行系列化

3.解决办法

创建接收数据对象,生成get\set方法:,在set方法上,加上@jsondeserialize注解,如下:

 public class testdto implements serializable {   
    /**
     * 生成时间
     *
     */
    private date created;
    /**
     * lastupd
     *
     */
    private date lastupd;
​
    public date getcreated() {
        return created;
    }
    @jsondeserialize(using = customjsondatedeserializer.class)
    public void setcreated(date created) {
        this.created = created;
    }
    public date getlastupd() {
        return lastupd;
    }
    @jsondeserialize(using = customjsondatedeserializer.class)
    public void setlastupd(date lastupd) {
        this.lastupd = lastupd;
    }
 }

在进行自定义序列化时,加上 @jsondeserialize(using = customjsondatedeserializer.class)注解,

其中@jsondeserialize,表示告诉springboot,当前属性进行自定义系列化,则springboot进行序列化时,将会跳过这个参数

customjsondatedeserializer.class为自定义序列化对象,如下:

package com.test;​
import com.fasterxml.jackson.core.jsonparser;
import com.fasterxml.jackson.core.jsonprocessingexception;
import com.fasterxml.jackson.databind.deserializationcontext;
import com.fasterxml.jackson.databind.jsondeserializer;
​
import java.io.ioexception;
import java.text.parseexception;
import java.text.simpledateformat;
import java.util.date;
​
/**
 * 自定义序列化
 **/
public class customjsondatedeserializer extends jsondeserializer<date> {
​
    @override
    public date deserialize(jsonparser jp, deserializationcontext ctxt) throws ioexception, jsonprocessingexception {
        simpledateformat format = new simpledateformat("yyyy-mm-dd hh:mm:ss");
        string date = jp.gettext();
        try {
            return format.parse(date);
        } catch (parseexception e) {
            throw new runtimeexception(e);
        }
    }
}

以上,接受数据时,会自定义进行json序列化,接收date格式的数据。

@jsonserialize与@jsondeserialize使用

1.以注解方式使用

@jsondeserialize(using= datejsondeserializer.class)
@jsonserialize(using= datejsonserializer.class)
private date time;

2.自定义实现类

public class datejsondeserializer extends jsondeserializer<date>
{
    public static final simpledateformat format=new simpledateformat("yyyy-mm-dd hh:mm:ss");
    @override
    public date deserialize(com.fasterxml.jackson.core.jsonparser jsonparser, deserializationcontext deserializationcontext) throws ioexception, com.fasterxml.jackson.core.jsonprocessingexception {
 
        try
        {
            if(jsonparser!=null&&stringutils.isnotempty(jsonparser.gettext())){
                return format.parse(jsonparser.gettext());
            }else {
                return null;
            }
 
        }
        catch(exception e)
        {
            system.out.println(e.getmessage());
            throw new runtimeexception(e);
        }
    }
}
public class datejsonserializer extends jsonserializer<date> {
    public static final simpledateformat format=new simpledateformat("yyyy-mm-dd hh:mm:ss");
 
    @override
    public void serialize(date date, jsongenerator jsongenerator, serializerprovider serializerprovider) throws ioexception {
        jsongenerator.writestring(format.format(date));
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。