gpt4 book ai didi

java - 防止特定字段的自定义序列化

转载 作者:行者123 更新时间:2023-11-30 06:20:11 24 4
gpt4 key购买 nike

假设我有以下类(class):

class MyClass {
private Date dateToBeCustomeSerialized;
private Date dateToBeDefaultSerialized;
}

在我的 Spring Boot 应用程序中,我需要将每个 Date 对象序列化为 String。为此,为了避免在任何地方插入 @JsonSerializer,我在应用程序级别引入了一个自定义序列化器。

问题是我想避免在具有名称(而不是值)dateToBeDefaultSerialized的字段上使用自定义序列化器,但我似乎找不到方法来做到这一点。

这就是我的自定义“全局”Date 序列化程序的样子:

@Bean
@Primary
public ObjectMapper serializingObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Date.class, new DateSerializer());
objectMapper.registerModule(module);

return objectMapper;
}

public class DateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider serializers) throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(value);
gen.writeString(date);
}
}

是否有使用默认序列化器序列化名称 dateToBeDefaultSerialized 的属性?

最佳答案

可以通过实现ContextualSerializer来获取当前序列化字段的名称。默认序列化可通过 SerializerProvider 获得。尝试像这样重写序列化器:

class DateSerializer extends JsonSerializer<Date> implements ContextualSerializer {
private boolean doCustom;

DateSerializer() {}

private DateSerializer(boolean doCustom) { this.doCustom = doCustom; }

@Override
public void serialize(Date value, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (doCustom) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(value);
gen.writeString(date);
} else {
provider.defaultSerializeDateValue(value, gen);
}
}

@Override
public JsonSerializer<Date> createContextual(SerializerProvider config, BeanProperty property) {
boolean doCustom = property == null || !"dateToBeDefaultSerialized".equals(property.getName());
return new DateSerializer(doCustom);
}
}

关于java - 防止特定字段的自定义序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48319616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com