gpt4 book ai didi

java - 如何根据 URL 路径和嵌套级别配置 Jackson 和 Spring 以不同方式呈现对象

转载 作者:行者123 更新时间:2023-11-29 04:05:21 32 4
gpt4 key购买 nike

<分区>

在我们的 Spring 应用程序中,我们使用 Jackson 来呈现 Controller 的 JSON 响应。

对于某些端点,我们希望调整渲染行为,只渲染某些对象的 id 字段。

示例

我们有 3 种对象类型(OuterObject、ValueObject、InnerObject)。每个在其他字段旁边都有一个“id”字段。

JSON 对象的正常呈现:

{
"id": 1,
"name": "outerObject name",
"valueObject": {
"id": 11,
"name": "valueObject 11",
"innerObj": {
"id" : 111,
"name" : "innerObject 111"
}
}
}

JSON对象的特殊渲染(跳过内部对象的“name”字段)

{
"id": 1,
"namne": "obj name",
"valueObj": {
"id": 11,
"name": "valueObj 11",
"innerObj": {
"id" : 111
}
}
}

所以正如你所看到的,我们只想渲染某些对象的 id,但前提是它们是嵌套的。所以在示例中我们只想渲染内部对象的 id 字段。

但是如果另一个端点将返回内部对象,那么我们想要渲染整个对象。

我看到 Jackson 提供了许多注释来控制字段呈现方式的行为。但据我了解,它们都在强制执行我们不想要的静态行为。

因为我们有很多这样的记录(大约 400 条),所以我们不想为每个仅包含 id 字段的对象创建第二个变体。我们的方法是重用当前逻辑来构建和填充这些对象,并在将对象序列化为 JSON 字符串时丢弃某些字段。

更新

我认为@JsonView 注释无法解决该问题,因为一次只能使用一个 View 来呈现响应。

也许我没有把要求 100% 说清楚。

OuterObject 类型和 InnerObject 类型只是示例。我们有几种这样的类型(超过 400 种),它们可以嵌套在不同的组合中。 InnerObject 并不总是嵌套在 OuterObject 中。 InnerObject 也可以是不同端点的另一个响应的根,或者嵌套在除 OuterObject 之外的另一个对象中。

由于这个要求,我不知道如何使用 @JsonView 注释来解决这个问题。如果 OuterObject 和 InnerObject 类型可以是根对象或嵌套对象,我将如何定义 View 。我想我最终会为每个根到嵌套的对象组合创建一个 View 。拥有超过 400 个这样的对象,这可能会在复杂性上爆炸。

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