【发布时间】:2018-09-15 11:42:07
【问题描述】:
如何在 Spring Boot 的默认 JSON 响应中强制将 null 对象序列化为空字符串?
我希望它显示为:
{
myProperty: "",
}
但是默认出来的是:
{
myProperty: null,
}
我不希望 myProperty 被排除在此列表之外,因此我对更改 JsonInclude.Include.NON_NULL 不感兴趣
这是我尝试过的:
在我的主要WebMvcConfigurerAdapter 类中:
@Autowired
private NullAsEmptyStringSerializer nullSerializer;
@Bean
public Jackson2ObjectMapperBuilderCustomizer addCustomSerialization() {
return jacksonObjectMapperBuilder -> {
DefaultSerializerProvider serializerProvider = new DefaultSerializerProvider.Impl();
serializerProvider.setNullValueSerializer(nullSerializer);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializerProvider(serializerProvider);
jacksonObjectMapperBuilder.configure(objectMapper);
};
然后是我的nullSerializer 对象类:
@Component
public class NullAsEmptyStringSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString("\"\"");
}
}
问题是我的自定义类上从未调用过serialize() 方法。
【问题讨论】:
-
{myProperty: }不是有效的 JSON;你不可能强迫杰克逊产生无效的 JSON。您必须将输出作为字符串进行后处理。考虑创建无效的 JSON 是否是正确的方法。 -
@Bohemian 编辑让您开心。 :-)
标签: java spring-boot java-8 jackson