@JsonInclude注解使用

前言

@JsonInclude 是 Jackson 里的注解,用来控制 Java 对象序列化成 JSON 时,哪些字段需要输出,哪些字段可以省略。它不会影响反序列化,只影响 Java → JSON 的序列化过程。

@JsonInclude注解使用

常用 Include 策略

策略 含义 适用场景
ALWAYS 始终输出字段 默认行为,需要保留 null 字段时使用
NON_NULL 字段为 null 时不输出 最常见,减少 JSON 中多余 null
NON_ABSENT null 或 Optional.empty() 等"缺席值"不输出 字段类型是 Optional、AtomicReference 时更合适
NON_EMPTY null、空字符串、空集合、空数组等不输出 需要同时过滤 null 和空值
NON_DEFAULT 与默认值相同的不输出 想过滤 0、false、空串、默认构造值时慎用
CUSTOM 使用自定义过滤器决定 需要复杂过滤逻辑
USE_DEFAULTS 使用上层默认策略 字段上想继承类级别或全局配置
arduino 复制代码
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TriggerConfigFileUploadInputDto {
    /**
     * 设备标识(必填)
     */
    private String deviceName;

    /**
     * 文件名称(必填)
     */
    private String fileName;

    /**
     * utMqtt1.0 文件类型(非必填)
     */
    private String fileType;

    /**
     * 产品标识(必填)
     */
    private String productKey;

    /**
     * 上传模式(必填),见 {@link UploadMode}。
     * <p>
     * 实际传输时序列化为字符串:{@code MQTT_CHUNK | DOWNLOAD_URL | IOT_UPLOAD_URL | EXTERNAL_UPLOAD_URL}。
     */
    private String uploadMode;

    /**
     * 提供的文件上传地址,可为空
     */
    private String uploadUrl;

    /**
     * 等待文件上传结果的超时时间(秒)
     */
    private Integer waitTime;

    /**
     * 是否同步等待文件上传结果
     */
    private Boolean waitUploadResult;

    public static void main(String[] args) throws JsonProcessingException {
        TriggerConfigFileUploadInputDto triggerConfigFileUploadInputDto =
                new TriggerConfigFileUploadInputDto();
        triggerConfigFileUploadInputDto.setDeviceName("deviceName");
        ObjectMapper objectMapper = new ObjectMapper();
        System.out.println(objectMapper.writeValueAsString(triggerConfigFileUploadInputDto));
    }
}

这个在序列化的时候,null字段会忽略

总结

可以使用该注解控制实体类上的成员变量字段

相关推荐
mldong19 小时前
工作流引擎的退回修改:金额从 6666 改成 666,重提还是回到退回它的那个人
后端·架构
陈随易19 小时前
一个网吧网管,做了个网页,卖了 5000 万
前端·后端·程序员
captain3761 天前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
2601_962885721 天前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
深蓝AI1 天前
Python 3.13 的 Queue.shutdown:异步消费者终于能正常收工了
后端
武子康1 天前
MultiNet6 空闲崩溃:`EXCVADDR=0x8` 后又出现 `CORRUPT HEAP`
人工智能·后端·agent
步行cgn1 天前
Spring MVC 拦截器 Interceptor 详解:从执行流程到实战应用
java·spring·mvc
开开心心_Every1 天前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
萧瑟余晖1 天前
Spring Batch核心模型与快速上手详解
java·spring·batch
武子康1 天前
MultiNet7 每轮都 clean,ESP32-P4 内存为什么还在掉?
人工智能·后端·agent