如何在类的单个属性上覆盖application.yml中的Jackson全局序列化配置
解决方案
你可以通过Jackson提供的字段级注解覆盖全局配置,优先级高于yml中的全局规则,两种常用方案如下:
方案1:使用@JsonInclude注解(最简便,推荐)
直接在需要允许返回空数组的属性上添加@JsonInclude注解,强制指定该字段无论是否为空都序列化输出:
import com.fasterxml.jackson.annotation.JsonInclude; public class 你的目标类 { // 其他普通属性遵循全局规则 // 该字段例外:空数组也会输出 @JsonInclude(JsonInclude.Include.ALWAYS) private List<String> 要放开限制的数组/集合字段; // 省略getter、setter }
方案2:自定义字段序列化器(兼容低版本Jackson)
如果使用的Jackson版本较低,方案1和全局write-empty-json-arrays: false配置冲突不生效,可以给目标字段指定自定义序列化器强制输出空数组:
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import java.io.IOException; import java.util.List; // 自定义序列化器:空数组强制输出 public class EmptyArraySerializer extends JsonSerializer<List<?>> { @Override public void serialize(List<?> value, JsonGenerator gen, SerializerProvider serializers) throws IOException { if (value == null || value.isEmpty()) { gen.writeStartArray(); gen.writeEndArray(); return; } // 非空场景走默认序列化逻辑 gen.writeObject(value); } } // 目标字段绑定自定义序列化器 public class 你的目标类 { @JsonSerialize(using = EmptyArraySerializer.class) private List<String> 要放开限制的数组/集合字段; }
内容的提问来源于stack exchange,提问作者Guga Gamer
相关产品推荐
相关产品推荐

