gpt4 book ai didi

java - 从 Restful 服务返回时的最佳实践 - 返回 Java 对象与返回手动构造的 JSON

转载 作者:行者123 更新时间:2023-12-01 17:30:18 26 4
gpt4 key购买 nike

我目前正在开发可返回的静态 Web 服务,例如 List<ConfidentialData> 。 (我使用这个 ConfidentialData 作为这个问题的例子)

假设这个 ConfidentialData定义如下:

@Getter
@Setter
public class ConfidentialData {
private Integer id; // unique-identifier
private String data;
private String creationDate;
private String approvalDate;
}

现在,我正在使用 jackson,它在幕后转换此 List<ConfidentialData>转换为 JSON 并将其发送为 Response .

现在,UI 中的不同组件需要不同的 ConfidentialData 状态。假设我的一个 UI 页面(例如 page1)需要纯 ConfidentialData对象(JSON 中没有任何其他成员),另一个页面(例如 page2)需要 ConfidentialData具有一些附加成员的对象(假设这些成员与 ConfidentialData 的一些统计信息相关。这些统计信息实际上并不属于 ConfidentialData 对象,但会在 page2 要求时添加)。

我有 3 个选择:

  • 为 page1 和 page2 构造一个单独的域对象。
    • 恐怕这个解决方案的可扩展性不是很好,因为可能有更多页面需要稍微不同的 ConfidentialData 组成我最终会膨胀我的域对象。
  • 只需保留一个域对象并通过添加特定页面所需的其他成员来构造 JSON。
    • 我发现在这种情况下我必须使用 JSON。 (但我也知道存在像 GSON 这样的复杂库,这将使我的生活变得轻松)
  • 我可以简单地创建一个域对象,其中包含 page1、page2、page3 等所需的所有内容。 (并且我将根据需要继续向此 ConfidentialData 域对象添加任何其他成员)
    • 我非常反对这种方法,因为我们正在讨论的涉及 secret 数据的其他成员不容易计算。在某些情况下,它可能是与ConfidentialData相关的一些统计数据。计算这些统计数据的计算成本很高。当 UI 永远不会使用它时(例如,在 page1 的情况下),我不希望我的简单 API 调用完成所有这些计算

我可以看到第一种方法和第二种方法都有明显的缺点。我的问题是,在处理这种情况的安全服务方面有什么好的做法。

为什么不操作 JSON:

  • 此外,我不太赞成使用 JSON,因为我们的 java 权限过滤器(它是一个拦截器 - 拦截来自服务的响应,并根据用户的权限对列表进行一些过滤)将然后必须调整JsonArray用于进行过滤,而不是简单地过滤 List<ConfidentialData> .
  • 但考虑到我们拥有像 GSON 这样复杂的库,过滤就很容易了。
  • 此外,由于过滤只能基于 ConfidentialData#getId() 进行。 (而且这一点永远不会改变)我可以考虑继续使用基于 JSON 的方法,目前这种方法在可扩展性方面看起来很有希望。

我可以将其视为操作 JSON 和创建多个域对象之间的权衡。业界有没有遵循的标准来处理这种情况?

最佳答案

根据服务的调用方式,您可以仅填充 ConfidentialData 的相应属性,而其他属性保持不变。在序列化期间,您可以省略任何未设置的属性。这可以通过提供序列化库的适当元数据来实现,无论是 Jackson 还是 Gson。

关于java - 从 Restful 服务返回时的最佳实践 - 返回 Java 对象与返回手动构造的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61134696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com