SpringBoot @JsonDeserialize自定义Json序列化方式
程序员文章站
2022-03-07 12:23:48
目录@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)); }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: 关于SQL注入中文件读写的方法总结
推荐阅读
-
SpringBoot使用自定义json解析器的使用方法
-
Python: Json串反序列化为自定义类对象
-
SpringBoot整合SpringMVC之自定义JSON序列化器和反序列化器
-
SpringBoot2.3整合redis缓存自定义序列化的实现
-
基于SpringBoot的操作日志管理(AOP+自定义注解方式)
-
springboot aop 自定义注解方式实现一套完善的日志记录(完整源码)
-
springboot之additional-spring-configuration-metadata.json自定义提示
-
在SpringBoot 中从application.yml中获取自定义常量方式
-
golang如何自定义json序列化应用详解
-
springboot响应json null值过滤方式