Project Shoone

独立系SIer勤務。WEBエンジニアの備忘録

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を付けずに実装したいところですね!