Java Jackson を使用した時のシリアライズのソートの話である。
@JsonPropertyOrder を使わないで、ObjectMapper の設定として指定する方法
Java Object プロパティ順(フィールド宣言順)
Jackson version >= 2.6.1
ObjectMapper mapper = new ObjectMapper(); mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true);
アルファベット順
// @deprecated Since 2.13 use {@code JsonMapper.builder().configure(...)} mapper.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true);
バージョン 2.13 以降では、MapperFeature そのものが @Deprecated なのではなく
configure メソッドで、MapperFeature を指定することが @Deprecated になっている。
代わりに、アルファベット順を指定できる方法は、SerializationFeature では
アルファベット順指定が存在しないので、SerializationConfig を取得して
MapperFeature.SORT_PROPERTIES_ALPHABETICALLY でセットして再セットする。
mapper.setConfig( mapper.getSerializationConfig() .with(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY) );
Java Object プロパティ順(フィールド宣言順)も同じよう設定するなら、
MapperFeature.SORT_CREATOR_PROPERTIES_FIRST でセットして再セットする。
mapper.setConfig( mapper.getSerializationConfig() .with(MapperFeature.SORT_CREATOR_PROPERTIES_FIRST) );
整形してシリアライズ
DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(" ", DefaultIndenter.SYS_LF); DefaultPrettyPrinter printer = new DefaultPrettyPrinter(); printer.indentObjectsWith(indenter); printer.indentArraysWith(indenter); String res = mapper.writer(printer).writeValueAsString(object);