JacksonのPropertyNamingStrategyまとめ
命名規則まとめ
最近初めて「ケバブケース」というものを知りました。
名前 | 例 |
---|---|
キャメルケース | testString |
パスカルケース(アッパーキャメルケース) | TestString |
スネークケース | test_string |
ケバブケース | test-string |
アッパーケース | TEST_STRING |
ローワーケース | teststring |
Jacksonでの対応状況
普段はSpringで開発を行っているので、Jacksonでも普通にできるのか気になって調べました。 アッパーケース以外はPropertyNamingStrategyで用意されていました。(Jackson 2.7以降)
検証
@SneakyThrows public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); print("PropertyNamingStrategy", mapper.writeValueAsString(new CamelCase())); print("UpperCamelCaseStrategy", mapper.writeValueAsString(new PascalCase())); print("SnakeCaseStrategy", mapper.writeValueAsString(new SnakeCase())); print("KebabCaseStrategy", mapper.writeValueAsString(new KebabCase())); print("LowerCaseStrategy", mapper.writeValueAsString(new LowerCase())); } private static void print(String strategy, String json) { String format = "%-23s: %s"; System.out.println(String.format(format, strategy, json)); } @Getter // デフォルトはこれ。アノテーションを省略しても同じ @JsonNaming(PropertyNamingStrategy.class) static class CamelCase { private String testString = "hoge"; } @Getter @JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class) static class PascalCase { private String testString = "fuga"; } @Getter @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) static class SnakeCase { private String testString = "piyo"; } @Getter @JsonNaming(PropertyNamingStrategy.KebabCaseStrategy.class) static class KebabCase { private String testString = "hogera"; } @Getter @JsonNaming(PropertyNamingStrategy.LowerCaseStrategy.class) static class LowerCase { private String testString = "hogehoge"; }
実行結果
PropertyNamingStrategy : {"testString":"hoge"} UpperCamelCaseStrategy : {"TestString":"fuga"} SnakeCaseStrategy : {"test_string":"piyo"} KebabCaseStrategy : {"test-string":"hogera"} LowerCaseStrategy : {"teststring":"hogehoge"}
おまけ
- LowerCaseWithUnderscoresStrategy
- PascalCaseStrategy
上記二つはバージョン2.7 から非推奨となり、それぞれSnakeCaseStrategy、UpperCamelCaseStrategyを継承する形になっていました。
パスカルケースという呼び方は時代遅れということでしょうかね?(´・ω・`)
まとめ
アッパーケース以外はPropertyNamingStrategyで用意されていました。 なるべく@JsonPropertyを付けずに実装したいところですね!