当前位置: 代码网 > it编程>编程语言>Java > Java Jackson核心注解使用详解

Java Jackson核心注解使用详解

2025年05月11日 Java 我要评论
前言在 java 后端开发中,jackson 是最常用的 json 序列化/反序列化工具之一。jackson 提供了一系列功能强大的注解,用于精确控制 json 与 java 对象之间的映射逻辑。本文

前言

在 java 后端开发中,jackson 是最常用的 json 序列化/反序列化工具之一。jackson 提供了一系列功能强大的注解,用于精确控制 json 与 java 对象之间的映射逻辑。本文将深入讲解常用的几个核心注解:

  • @jsonproperty:指定字段的 json 名称
  • @jsonignore:忽略字段序列化/反序列化
  • @jsoninclude:控制字段是否参与序列化(如 null、空集合等)
  • @jsonformat:格式化日期时间
  • @jsoncreator / @jsonvalue:自定义对象的序列化/反序列化逻辑

一、@jsonproperty-指定json字段名

默认情况下,jackson 使用 java 字段名作为 json 字段名。但在前后端字段命名不一致时,可以使用 @jsonproperty 显式指定:

public class user {
    @jsonproperty("user_name")
    private string username;
    // getter/setter
}

输出 json:

{
  "user_name": "tom"
}

二、@jsonignore-忽略字段

@jsonignore 用于在序列化或反序列化过程中跳过某些字段,比如密码、内部字段等:

public class account {
    private string username;
    @jsonignore
    private string password;
    // getter/setter
}

输出 json 不包含 password 字段。

三、@jsoninclude-控制是否输出null或空字段

通过 @jsoninclude 可以控制字段是否输出。常见选项:

  • include.non_null:忽略 null 值
  • include.non_empty:忽略 null、空字符串、空集合等
@jsoninclude(jsoninclude.include.non_null)
public class product {
    private string name;
    private string description;
}

description 为 null 时不会出现在 json 中。

也可以作用于类、字段或全局配置:

@jsoninclude(jsoninclude.include.non_empty)
private list<string> tags;

四、@jsonformat-格式化时间

java 中的日期类型默认序列化为时间戳。通过 @jsonformat 可以指定格式和时区:

public class event {
    @jsonformat(pattern = "yyyy-mm-dd hh:mm:ss", timezone = "gmt+8")
    private date eventtime;
}

输出 json 中的日期格式为:"2025-05-06 16:00:00"

五、@jsoncreator/@jsonvalue-自定义序列化与反序列化

1. @jsoncreator:构造方法反序列化

当对象没有默认构造器,或你希望控制反序列化逻辑时使用:

public class currency {
    private string code;
    @jsoncreator
    public currency(@jsonproperty("code") string code) {
        this.code = code;
    }
    public string getcode() { return code; }
}

2. @jsonvalue:自定义序列化值

如果你希望整个对象在序列化时只输出某个字段,可以使用 @jsonvalue:

public class status {
    private final string value;
    public status(string value) {
        this.value = value;
    }
    @jsonvalue
    public string getvalue() {
        return value;
    }
}

序列化后将只输出字符串:

"active"

六、完整示例

public class user {
    @jsonproperty("user_name")
    private string username;
    @jsonignore
    private string password;
    @jsoninclude(jsoninclude.include.non_null)
    private string email;
    @jsonformat(pattern = "yyyy-mm-dd")
    private date birthday;
    // getters and setters
}

七、实战项目结构与代码仓库

示例接口返回序列化结果

@restcontroller
public class usercontroller {
    @getmapping("/user")
    public user getuser() {
        user user = new user();
        user.setusername("alice");
        user.setpassword("123456");
        user.setemail(null);
        user.setbirthday(new date());
        return user;
    }
}

八、总结

jackson 提供的注解使我们可以精准控制对象与 json 的映射行为。合理使用 @jsonproperty@jsonignore@jsoninclude 等注解,不仅可以满足前后端字段差异需求,还能提升代码的可读性与可维护性。

这些注解在实际开发中广泛应用,是每一位 java 开发者都应掌握的重要工具。如果你希望构建更强大的 json 数据模型控制体系,jackson 注解体系是你的得力助手。

以上就是java jackson核心注解使用详解的详细内容,更多关于java jackson核心注解的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com