欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > jackson 中常用注解说明

jackson 中常用注解说明

2025/12/14 6:40:39 来源:https://blog.csdn.net/Gemini1995/article/details/142134604  浏览:    关键词:jackson 中常用注解说明

Jackson 是一个流行的 JSON 序列化和反序列化库,提供了丰富的注解来控制对象与 JSON 之间的转换过程。以下是 Jackson 中常用的注解及其说明:

1. @JsonProperty

用于指定 JSON 中的字段名与 Java 对象字段之间的映射。可以用于序列化和反序列化过程。

@JsonProperty("custom_name")
private String name;

说明:将 Java 对象的 name 字段映射为 JSON 中的 custom_name 字段,反之亦然。


2. @JsonAlias

允许多个别名字段映射到同一个 Java 字段(仅适用于反序列化)。

@JsonAlias({"name", "alias_name"})
private String label;

说明:JSON 中如果有 namealias_name 字段,都将映射到 label 字段。


3. @JsonIgnore

用于忽略某个字段,不将其序列化或反序列化。

@JsonIgnore
private String password;

说明password 字段不会出现在序列化的 JSON 中,反序列化时也会被忽略。


4. @JsonIgnoreProperties

用于在类级别忽略多个字段。

@JsonIgnoreProperties({"field1", "field2"})
public class MyClass { }

说明field1field2 字段在序列化和反序列化过程中将被忽略。


5. @JsonInclude

控制哪些字段会被序列化。可以根据字段值是否为 null 或默认值来决定是否序列化。

@JsonInclude(JsonInclude.Include.NON_NULL)
private String middleName;

说明middleName 字段仅在不为 null 时才会被序列化。


6. @JsonFormat

用于格式化日期、时间或其他格式的字段。

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date birthDate;

说明birthDate 字段会以 yyyy-MM-dd 格式序列化为字符串。


7. @JsonCreator

用于指定 Jackson 在反序列化时使用的构造函数或静态工厂方法。

public class User {private String name;private int age;@JsonCreatorpublic User(@JsonProperty("name") String name, @JsonProperty("age") int age) {this.name = name;this.age = age;}
}

说明:指定 Jackson 使用带有 @JsonCreator 的构造函数来反序列化对象。


8. @JsonSetter

用于指定反序列化时设置字段的 setter 方法。

@JsonSetter("name")
public void setFullName(String name) {this.name = name;
}

说明:指定反序列化时,JSON 中的 name 字段会调用 setFullName 方法。


9. @JsonGetter

用于指定序列化时获取字段的 getter 方法。

@JsonGetter("name")
public String getFullName() {return this.name;
}

说明:序列化时,getFullName 方法的返回值会映射到 JSON 中的 name 字段。


10. @JsonAnyGetter@JsonAnySetter

允许将动态属性映射到 Map 中,适用于未知或动态的 JSON 字段。

@JsonAnyGetter
public Map<String, Object> getProperties() {return properties;
}@JsonAnySetter
public void setProperty(String key, Object value) {properties.put(key, value);
}

说明:这些注解允许在 JSON 中的任意字段与 Map 的键值对之间进行映射。


11. @JsonAutoDetect

控制 Jackson 自动检测哪些字段和方法需要序列化和反序列化。

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class MyClass { }

说明:可以指定字段、方法的可见性,如 ANY 表示所有字段都可被检测。


12. @JsonUnwrapped

用于将对象的字段直接展平在父级 JSON 对象中,而不是作为嵌套对象。

public class Name {private String firstName;private String lastName;
}public class User {@JsonUnwrappedprivate Name name;
}

说明:会将 name 对象的字段展平在 User 对象的 JSON 中,如 { "firstName": "John", "lastName": "Doe" }


13. @JsonRawValue

用于输出未转义的原始 JSON 内容。

@JsonRawValue
private String rawJson = "{\"key\": \"value\"}";

说明rawJson 字段会被直接输出为 {"key": "value"},而不是作为字符串输出。


14. @JsonDeserialize@JsonSerialize

用于指定自定义的序列化和反序列化器。

@JsonDeserialize(using = CustomDeserializer.class)
@JsonSerialize(using = CustomSerializer.class)
private Date date;

说明:可以为某个字段指定自定义的序列化和反序列化逻辑。


这些注解帮助你精确控制对象和 JSON 之间的转换过程,从字段映射到日期格式化,再到忽略特定字段,Jackson 提供了强大的工具来满足各种需求。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词