gpt4 book ai didi

java - 让 Jackson 使用 GSON 注释

转载 作者:行者123 更新时间:2023-12-05 03:25:21 27 4
gpt4 key购买 nike

我有一个无法更改的数据模型。模型本身使用 GSON 注释进行注释。

@SerializedName("first_value")
private String firstValue = null;

Jackson 的反序列化没有按需要工作。 Jackson 无法匹配该条目,因此该值为空。

它适用于

@JsonProperty("first_value")
private String firstValue = null;

有什么方法可以让 Jackson 使用 GSON 注释,或者是否有任何其他解决方案不需要更改原始模型注释?

最佳答案

我稍微调查了一下这个问题,似乎 @JsonProperty 注释是用 JacksonAnnotationIntrospector 处理的。扩展后者,使其处理 @SerializedName,似乎可以保留原始行为(我希望如此):

@NoArgsConstructor(access = AccessLevel.PRIVATE)
final class SerializedNameAnnotationIntrospector
extends JacksonAnnotationIntrospector {

@Getter
private static final AnnotationIntrospector instance = new SerializedNameAnnotationIntrospector();

@Override
public PropertyName findNameForDeserialization(final Annotated annotated) {
@Nullable
final SerializedName serializedName = annotated.getAnnotation(SerializedName.class);
if ( serializedName == null ) {
return super.findNameForDeserialization(annotated);
}
// TODO how to handle serializedName.alternate()?
return new PropertyName(serializedName.value());
}

}
public final class SerializedNameAnnotationIntrospectorTest {

private static final AnnotationIntrospector unit = SerializedNameAnnotationIntrospector.getInstance();

@Test
public void test()
throws IOException {
final ObjectMapper objectMapper = new ObjectMapper()
.setAnnotationIntrospector(unit);
final Model model = objectMapper.readValue("{\"first_value\":\"foo\",\"second_value\":\"bar\"}", Model.class);
Assertions.assertEquals("foo", model.firstValue);
Assertions.assertEquals("bar", model.secondValue);
}

private static final class Model {

@SerializedName("first_value")
private final String firstValue = null;

// does not exist in the original model,
// but retains here to verify whether the introspector still works fine
@JsonProperty("second_value")
private final String secondValue = null;

}

}

请注意,我不是 Jackson 专家,因此我不确定它的效果如何。

关于java - 让 Jackson 使用 GSON 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72027481/

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