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

标签 java json jackson

例如,我有一个类 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/

相关文章:

java - 使用一个 DTO 对象处理 2 次转换

java - JSON Jackson 将不同的键解析到同一个字段中

java - 在 Java 中将除法的 double 结果转换为 int

java - Sybase/JDBC : how to detect reorgs or exclusive locks?

ios - RestKit 与 NSDictionary 和 NSArray 对象的映射

java - 如何用Java从txt文件中读取JSON数据?

java - 本地化变量的值

java - 如何保存和显示应用程序制作的照片

javascript - 这个 JavaScript 的作用是什么?

java - 读取空的 YAML 文件