Jackson JSONシリアライズ実行で、null を空文字にする

汎用的にシリアライザを設定するのが賢い
com.fasterxml.jackson.databind.JsonSerializer 実装を
com.fasterxml.jackson.databind.ser.DefaultSerializerProvider
で、約束して ObjectMapper に登録する。

DefaultSerializerProvider が抱える
public final static class Impl extends DefaultSerializerProvider

Method that can be used to specify serializer that will be
used to write JSON values matching Java null values
instead of default one (which simply writes JSON null).

と、NULL の時の設定メソッド setNullValueSerializer で設定する。

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
DefaultSerializerProvider dsp = new DefaultSerializerProvider.Impl();
dsp.setNullValueSerializer(new JsonSerializer<Object>(){
    @Override
    public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException{
        gen.writeString("");
    }
});
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializerProvider(dsp);


デフォルトの JSON整形

DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
printer.indentObjectsWith(new DefaultIndenter());
printer.indentArraysWith(new DefaultIndenter());
ObjectMapper mapper = new ObjectMapper();
String res = mapper.writer(printer).writeValueAsString(some);