このパターンを使用すると、シリアライズ対象のプロパティ(getter)にアノテーションでシリアライザを指定しなくてよくなります。
特定型に対して一律シリアライザを適用する場合には、もれなく実行できるメリットがあります。
カスタムなシリアライザの作り方はこちら→[Jackson]末尾のスペースを取り除いんてjson変換する
この例では、String型のプロパティに対して一律スペースをトリムするシリアライザが適用されます。
final Sample sample = new Sample();
sample.setName("aa ");
sample.setAge(100);
// 型とシリアライザのマッピングを定義
final SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(String.class, new TrimSpaceSerializer());
final ObjectMapper objectMapper = new ObjectMapper();
// ObjectMapperにシリアライザの定義を持つモジュールを追加
objectMapper.registerModule(simpleModule);
final String result = objectMapper.writeValueAsString(sample);
// カスタムなシリアライザ
private static class TrimSpaceSerializer extends JsonSerializer {
@Override
public void serialize(
String value,
JsonGenerator gen,
SerializerProvider serializers) throws IOException, JsonProcessingException {
gen.writeString(value.trim());
}
}
実行すると、この結果のようにString型のプロパティに対してトリムが行われます。
{"name":"aa","age":100}