roh*_*hit 7 java serialization json jackson
最近,我偶然发现了我的新团队大量使用JsonObject进行剩余数据交换的情况。他们的观点是在使用pojo时,我们与其余服务紧密绑定,而jsonObject提供了自由。同样,它避免了不必要的数据序列化,同时大大减少了类数。
我有几点要面对他们:
@JsonIgnore我不知道反序列化的确切成本,但是我不知何故应该没有太大的区别。
有人可以帮助我了解应采取的观点吗?
请提供使用POJO和JSONObject的利弊。
谢谢
我发现拥有pojos有以下优点
1)可读性-您将不会真正了解复杂json的结构。编写一个简单的get将需要知道json的结构。请参考我文章的“基于JSON对象的POJO”部分-> https://medium.com/tech-tablet/programming-went-wrong-oops-38d83058885
2)提供类型检查-我们可以轻松地将猫分配给狗,甚至在运行时甚至都不知道。
3)通过组合和封装感觉更面向对象-使用POJO可以轻松理解设计师的观点。是具有HAS-A车轮的IS-A车辆的汽车。
4)您可以选择要反序列化的内容,然后仅将其保留在内存中-当使用JSON对象反序列化刚刚通过网络接收到的对象时,无法使用JSON对象选择必须反序列化的内容并存储到内存中。如果您有一个1 MB大小的对象,其中只有200字节是您的有效负载,那么如果不使用POJO,我们最终将整个1 MB对象保存在内存中。
5)允许使用集合并以清晰的方式对其进行流操作-JsonNode中不存在对流操作的本机支持。我们将需要使用可以避免的StreamStupport对象。
6)允许跨框架引用。通过一些注释,您可以选择将特定的字段映射到数据库客户端-在为数据库使用ORM框架时,很容易注释实体并将其映射到数据库模式。
7)自然支持设计模式
8)最小化非本地依赖性-为什么必须使用JsonNode或本机Java中本身没有的等效项?特别是如果它具有上述缺点。
如果您担心与pojo一起使用的仪式(例如有吸气剂,二传手等),请查看“龙目岛”。该库将帮助您以简洁的方式创建pojos,并仍然获得上述好处。
另一方面,如果您要处理的是一个难以更改的旧API,该API会以动态更改的响应进行响应,那么JsonNode是一个快速的选择。
这实际上取决于情况和应用程序的性质。如果您要接收的数据没有固定的结构/字段名称/数据类型,或者一直在变化,那么使用JsonObject当然更有意义。
另一方面,如果它具有固定的结构并且涉及访问字段的操作,则最好使用pojo。它具有更好的IMO可读性。
视情况而定:
使用 Pojo :
@Transientjava中的关键字来完成,但如果您使用了JsonObject,这将需要一些代码变化)。@JsonInclude(Include.NON_EMPTY)。使用 JsonObject:
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |