例如,我有一个类 User
,它只有 2 个字段 - name
和 identification
,由 @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/