6
Help us understand the problem. What are the problem?

posted at

updated at

SpringBootでJackson使用時にnullを空文字として扱いたい

目的

@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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
6
Help us understand the problem. What are the problem?