gpt4 book ai didi

java - Jackson 展开/包裹对象

转载 作者:行者123 更新时间:2023-12-05 06:40:24 26 4
gpt4 key购买 nike

我有一个 spring boot 项目,我有一个这样的类:

@Value
public class A {
@JsonUnwrapped
OrderKey key;
String description;
B b;

@Value
public static class B {
String description;
}

}

@Value
public class OrderKey {
@JsonProperty( "_key" )
String id;

}

我有 mixin,但为简洁起见在此示例中添加了注释。这在序列化为 JSON 时效果很好,问题是当我尝试反序列化时,如果存在一些 @JsonWrapped 注释,它可能会起作用。

简而言之,我正在尝试将 ArangoDB 与 rest 一起使用,我可以创建/读取文档,但我需要使用我自己的值对象,不幸的是我不能将键用作字符串,它由 订单键@Value 注释来自 lombok 项目。

有什么办法可以实现吗?

最佳答案

您可以尝试在 class A 中用 @JsonCreator 注释定义一个构造函数。然后,Jackson 可以使用此构造函数创建一个 A 对象,并将您在 JSON 文档中期望的字段映射到 A 的字段。简化示例:

@Value
public class A {
@JsonUnwrapped
OrderKey key;
String description;

@JsonCreator
public A(@JsonProperty("key") String key,
@JsonProperty("description") String description) {
this.key = new OrderKey(key);
this.description = description;
}
}

请注意,A 的构造函数将阻止创建 @Value 隐含的 @AllArgsConstructor 构造函数。

也可以避免使用 Java 8 和一些额外模块的构造函数注释。检查this例如我的其他答案。

关于java - Jackson 展开/包裹对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42789248/

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