gpt4 book ai didi

java - 如何在将对象转换为 Jackson 映射时忽略@JsonProperty

转载 作者:行者123 更新时间:2023-12-05 02:56:46 24 4
gpt4 key购买 nike

例如,我有一个类 User,它只有 2 个字段 - nameidentification,由 @JsonProperty< 注释分别。我使用 Jackson 将此对象转换为 Map,但结果不是我所期望的。我希望结果映射中的所有键都是我在 User 中声明的,而不是 @JsonProperty 中的值。

类用户

class User {
@JsonProperty("username")
private String name;

@JsonProperty("id")
private int identification;

//constructor, getters, setters and toString
}

代码片段

ObjectMapper mapper = new ObjectMapper();
User user = new User("Bob", 123);
System.out.println(user.toString());

Map<String, Object> result = mapper.convertValue(user, Map.class);
System.out.println(result.toString());

控制台输出

User [name=Bob, identification=123]
{username=Bob, id=123}

但是我期望 map 的输出如下。字段名称应该与 User 类中定义的相同,而不是 @JsonProperty 中指定的值。顺便说一句,我无法删除 @JsonProperty,因为它们在某处用于序列化/反序列化。

{name=Bob, identification=123}

任何意见和建议将不胜感激。谢谢!

最佳答案

你必须像这样配置你的对象映射器(但它会忽略所有注释)

ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.USE_ANNOTATIONS);

我找到了另一种方法,它只关闭@JsonProperty 的名称设置,并保留@JsonProperty 的另一个属性和另一个Jackson 注释。如果你想关闭一些额外的注释(或部分注释) - 覆盖实现它的方法

mapper.setAnnotationIntrospector( new JacksonAnnotationIntrospector() {
@Override
public PropertyName findNameForSerialization(Annotated a) {
return null;
}
});

关于java - 如何在将对象转换为 Jackson 映射时忽略@JsonProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60185183/

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