Spring Boot中如何让指定字段使用默认Date序列化器
解决Spring Boot中特定Date字段跳过全局自定义序列化器的问题
快速解决方案
你可以通过给目标字段添加@JsonSerialize注解,显式指定使用Jackson自带的默认DateSerializer,来覆盖全局的自定义序列化配置。
详细步骤
首先,为了避免类名冲突(Jackson本身也有一个DateSerializer类),建议先修改你的自定义序列化器名称:
- 重命名自定义Date序列化器
public class CustomDateSerializer extends JsonSerializer<Date> { @Override public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date = sdf.format(value); gen.writeString(date); } }
- 更新全局ObjectMapper配置,使用改名后的序列化器:
@Bean @Primary public ObjectMapper serializingObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addSerializer(Date.class, new CustomDateSerializer()); objectMapper.registerModule(module); return objectMapper; }
- 给目标字段添加注解,指定使用Jackson自带的默认序列化器:
注意要导入Jackson官方的DateSerializer类,而非你自定义的:
import com.fasterxml.jackson.databind.ser.std.DateSerializer; class MyClass { private Date dateToBeCustomeSerialized; @JsonSerialize(using = DateSerializer.class) private Date dateToBeDefaultSerialized; }
原理说明
Jackson对字段级注解的优先级高于全局注册的序列化器,所以通过在dateToBeDefaultSerialized字段上显式指定默认序列化器,就能让该字段跳过全局的自定义配置,使用Jackson原生的Date序列化逻辑。
内容的提问来源于stack exchange,提问作者pirox22
相关产品推荐
相关产品推荐

