前言
@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字段会忽略
总结
可以使用该注解控制实体类上的成员变量字段