了解自定义De / Serializer:JSON绑定概述系列

自定义JSON绑定的最高级方法是使用自定义序列化程序和反序列化程序。

JSON-B序列化器和反序列化器是可用的最低级别的自定义,并且可以访问JSON处理解析器和生成器。

定制的序列化程序必须实现JsonbSerializer接口,并为serialise()方法提供逻辑。 这段代码显示了一个简单的示例,说明如何自定义Book对象的序列化。

JsonGenerator用于按属性创建JSON文档属性。 id属性的值是固定的,而作者的名字则被奉为firstNamelastName属性。

public class BookSerializer implements JsonbSerializer<Book> {@Overridepublic void serialize(Book book,JsonGenerator generator, SerializationContext ctx) {generator.writeStartObject();generator.write("id", "QWE-123-RTS");generator.write("title", book.getTitle());generator.write("firstName", book.getAuthor().split(" ")[0]);generator.write("lastName", book.getAuthor().split(" ")[1]);generator.writeEnd();}}

通过实现JsonbDeserializer接口并为deserialize ()方法提供逻辑,可以定制反序列化操作。

此代码显示了一个示例,该示例仅从JSON文档中提取BookID

public class BookDeserializer implements JsonbDeserializer<String> {@Overridepublic String deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {while (parser.hasNext()) {JsonParser.Event event = parser.next();if (event == JsonParser.Event.KEY_NAME) {String keyName = parser.getString();if (keyName.equals("id")) {return ctx.deserialize(String.class, parser);}}parser.next();}return "";}
}

序列化器和反序列化器的实例通过相应的JsonbConfig注册。 withDeserializers()或。 withSerializers()方法,如下所示。

JsonbConfig config = new JsonbConfig().withDeserializers(new BookDeserializer()).withSerializers(new BookSerializer());

或者 ,可以使用@JsonbTypeSerializer@JsonbTypeDeserializer注释类型,并传递相关定制类的类名。

@JsonbTypeDeserializer(BookDeserializer.class)
public class Booklet{}

围捕

因此,今天我们看到了Java EE处理JSON方式的一些令人振奋的新变化。

JSON处理现已与最新的互联网标准保持同步 ,并且JSON-B的设计师着手标准化开发人员将Java对象转换为JSON文档的方法,反之亦然。

如果您到目前为止似乎已经熟悉了API和功能,那是有意的:API标准化了大多数Java开发人员应该已经熟悉的序列化和反序列化技术。

两种定制模型:运行时和编译时提供了一种高度灵活和直观的方式来微调API。

自描述的注释和配置方法有助于提高生产率并简化开发。

即使这样,仍可以轻松实现序列化和反序列化操作低级操作以及高级定制。

除了我在这些博客文章中讨论的内容之外,关于JSON Binding API还有更多的知识要知道。

翻译自: https://www.javacodegeeks.com/2018/05/get-to-know-custom-de-serializers-json-binding-overview-series.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

墙面有几种装修方法_新房装修除甲醛 用这几种方法就足够

新房装修后会散发出刺鼻的有害物质&#xff0c;其中甲醛是含量最高&#xff0c;危害最大的有害气体。那怎么才能有效的去除甲醛呢?下面小编就为大家带来新房装修除甲醛的四大方法&#xff0c;希望能给大家带来帮助。新房装修除甲醛方法一&#xff1a;开窗通风法将新房的窗户打…

Parallel Parking of Truck-Trailer Using Multistage Nonlinear MPC之MATLAB simulink编译转换C++代码(内附下载地址)

引言 这个例子展示了如何使用多级非线性模型预测控制(NLMPC)来并行停放卡车-挂车系统。 在本例的应用场景中,卡车-拖车系统(EGO车辆)在停车场行驶。当停车点被定位时,非线性预测控制规划器生成停车路径。然后,自行车使用另一个非线性MPC控制器,沿着规划的路径到达目标姿态…

lambda 加和_流畅和稳定的API的Lambda

lambda 加和几周前&#xff0c;我写了关于Java 8 lambda的介绍 。 在本简介中&#xff0c;我解释了什么是lambda以及如何将它们与Java 8中也引入的新Stream API结合使用。 Stream API为集合提供了更实用的接口。 此接口在很大程度上取决于lambda。 但是&#xff0c;lambda不仅…

攻防世界 适合做桌面_空间“狭小”的二人世界,适合情侣们做浪漫的事情

在最浪漫的11月与它邂逅&#xff0c;有着深秋的枫红、累累的苹果红、还有童话绘本中的苹果屋红&#xff0c;充满着热情活力的色彩&#xff0c;让人感到雀跃。眼瞧见银河的感动。那晚入住于福寿山农场的露营区&#xff0c;位在深山中的它空气轻透又鲜少光害&#xff0c;是观赏星…

使用混合多云每个人都应避免的3个陷阱(第1部分)

每天都在肆意宣传云&#xff0c;但每个人都应避免三个陷阱。 从云&#xff0c;混合云到混合多云&#xff0c;您被告知这是确保业务数字化未来的一种方式。 您必须做出的这些选择不会排除提高客户体验和敏捷交付这些应用程序的日常工作。 让我们开始一段旅程&#xff0c;仔细研…

jquery开关灯案例_全屋开关插座布局讲解,自己规划怕遗漏,手把手教你,很详细...

开关插座是装修内重要的一环&#xff0c;然而也最容易被忽视。装修完住进来后才发现插口不够用&#xff0c;插座被家具挡住&#xff0c;想改还得砸墙&#xff0c;没办法只能用拖线板。然而&#xff0c;满屋都是拖线板&#xff0c;乱糟糟的&#xff0c;看着就惹人烦&#xff0c;…

富贵不压重发_为什么老人常说“贵人不顶重发”,“重发”是什么意思? ?...

"先&#xff0c;""贵人""在我国一般是指有身份有地位有财富的人&#xff0c;而""重发""顾名思义是指头发多的人&#xff0c;那么&#xff0c;老人们为什么会说""贵人不顶重发""呢?有书君认为&#xff0c;可…

java六大原则_六大Java功能

java六大原则我花了无数小时来对不同的应用程序进行故障排除。 通过经验&#xff0c;我可以得出关于大多数开发人员应该远离的几个Java SE功能/ API的结论。 当我提到大多数开发人员时&#xff0c;我会想到常规的Java EE开发人员&#xff0c;而不是库设计人员/基础结构工程师。…

打开虚拟机磁盘类型无效_[图文]VMWARE虚拟机如何打开.VMDK格式的磁盘映像

最近在折腾安卓虚拟机时使用Android x86项目组提供的镜像&#xff0c;架构问题本身无法直接在电脑安装安卓系统。而Android x86项目则是国外团队通过源代码进行移植的版本&#xff0c;虽然不能同步更新但现在也倒是已经 8.1 版。至于折腾安卓虚拟机的原因则是手头的安卓机还是4…

Apache Ivy 2.5.0-rc1发布–现在允许解析器超时

几周前&#xff0c;我们发布了Apache Ivy的2.5.0-rc1版本。 Apache Ivy是一个依赖项管理构建工具&#xff0c;通常与Apache Ant结合使用。 可在项目下载页面上下载 自Apache Ivy的上一版本于2014年12月发布以来&#xff0c;此版本具有重要意义。距上一个正式年份已超过3年。 在…

感量越大抑制频率约低_脉冲信号是什么?它与频率,占空比,正、负逻辑间是什么关系?...

在数字电子系统中&#xff0c;所有传送的信号均为开关量&#xff0c;即只有两种状态的电信号&#xff0c;这种电信号&#xff0c;我们称作做脉冲信号&#xff0c;这是所有数字电路中的基本电信号一个标准的脉冲信号如下图所示。我们把脉冲信号由低电压跳变至高电压的脉冲信号边…

datagrid 小数点_EasyUI 解决 datagrid 中 NumberBox 限制小数位数后不能输入小数点问题...

初始化界面&#xff0c;发现编辑datagrid&#xff0c;不能输入小数点。var arrColumnsCNT [[{title: 毛重,field: GrossWeight,halign: center,width: 60,sortable: true,frozen: true,editor: {type: numberbox,options:{precision:2}}}]];function DefDataGridCNT() {objDat…

【OFDM系列9】OFDM采用正交区分不同子载波的,但是子载波通过调相后携带了基带信号后,如何还能继续保证两者正交

不经意间在知乎看到这样一个问题&#xff0c;在此记录一下我的看法 OFDM采用正交区分不同子载波的&#xff0c;但是子载波通过调相后携带了基带信号后&#xff0c;如何还能继续保证两者正交&#xff1f; 补充内容是&#xff1a;OFDM是指通过2组正交载波传递信息&#xff0c;但…

使用threadlocal_何时以及如何使用ThreadLocal

使用threadlocal正如我们的读者可能已经猜到的那样&#xff0c;我每天都会处理内存泄漏。 最近&#xff0c;一种特殊类型的OutOfMemoryError消息开始引起我的注意-滥用ThreadLocals引发的问题变得越来越频繁。 在查看此类泄漏的原因时&#xff0c;我开始相信其中一半以上是由于…

企业为什么要开通银企直联_企业为什么要做网站推广

随着现代社会的发展&#xff0c;如果企业不做网站推广&#xff0c;那么可以说是寸步难行&#xff0c;今天就来为大家说说企业为什么一 定要做网站推广的详情&#xff01;1 、网络品牌推广做网络营销的结果就是在互联网要有自己的品牌&#xff0c;并且可以再网络上得到无限性的延…

在Java错误产生之前对其进行处理的新方法

我们如何认识到解决预生产错误的旧方法还不够&#xff0c;以及我们如何能够改变这种情况 第一次尝试时就没有完美的代码&#xff0c;我们所有人都可以证明我们已经学到了很难的方法。 不管我们使用多少测试周期&#xff0c;代码审查或工具&#xff0c;总有至少一个偷偷摸摸的错…

学术诚信的重要性_申论作文开头之诚信

本段是经典开头或过渡段落写作&#xff0c;通过反面论证引出总论点重要性&#xff0c;结构清晰&#xff0c;层次感强&#xff0c;本段可以适用于公民道德与诚信建设问题、食品安全问题、环境污染等等&#xff0c;其中影响及重要性分析语句可以用于申论作文的开头部分&#xff0…

curl 访问不到html_嵌入式工程师入门前后端系列1:访问一个网页

做为嵌入式行业的从业者&#xff0c;最近经常听到PAAS&#xff0c;SAAS等和”云”相关的概念&#xff0c;被整的一头雾水。很多时候咱们的物联网硬件设备都会有一个云平台&#xff0c;用于设备管理或者UI应用展示等功能&#xff0c;这通常是由专门的前后端工程师配合美工一起完…

java:8最小镜像_Java:本地最小语言

java:8最小镜像在1996年至2002年之间&#xff0c;我用Java编写了成千上万行代码。我用Java 1.0到Java 1.4编写了Web框架&#xff0c;电子表格以及更多内容。 与90年代中期&#xff08;预模板&#xff09;的C 相比&#xff0c;Java是一种完全令人惊奇的语言。 JVM是所有计算机语…

seaborn无法import_无法导入seaborn

我在进口seaborn时有问题。我最近在我的电脑上安装了“Python”&#xff0c;并尝试使用seaborn pacjesge。我更新了scipy和{}。实际上&#xff0c;在更新scipy之前&#xff0c;python看不到{}。问题是什么&#xff1f;请帮帮我Python 2.7.10 |Anaconda 2.3.0 (64-bit)| (defaul…