目的
@ResponseBodyを利用時にフィールドにnullが設定されているオブジェクトを送信する際に生成されるJSONをnullを空文字に変換して送信したい。
これを
before
{
"hoge":null,
"fuga":"fuga"
}
こうしたい
after
{
"hoge":"",
"fuga":"fuga"
}
まとめ
Jacksonが提供するObjectMapperに独自定義したシリアライザーをDefaultSerializerProviderを通して設定してやればよい。
この流れをSpringBootで実現する方法。
設定方法
SpringBoot利用時にはなるべくXML等を利用せず設定用のBeanを@Configrationを設定したクラスにまとめることが推奨されているので例にならって実装します。
設定用BeanComponent
AppConfig.Java
@Configuration
public class AppConfig {
@Bean
public Jackson2ObjectMapperBuilder jackson2ObjectMapper() {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() {
@Override
public void configure(ObjectMapper objectMapper) {
super.configure(objectMapper);
DefaultSerializerProvider.Impl dsp = new DefaultSerializerProvider.Impl();
dsp.setNullValueSerializer(new NullValueSerializer());
objectMapper.setSerializerProvider(dsp);
}
};
return builder;
}
}
独自シリアライザ
NullValueSerializer.Java
public class NullValueSerializer extends JsonSerializer<Object> {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
gen.writeString("");
}
}
参考
https://qiita.com/hikaruworld@github/items/0d629580584de1708b71
http://www.ne.jp/asahi/hishidama/home/tech/java/spring/boot/rest/jackson.html