LoginSignup
6
9

More than 1 year has passed since last update.

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

Last updated at Posted at 2018-03-19

目的

@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

6
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9