195

インターネットから JSON 文字列を取得します。私が見たほとんどの JSON と同様に、アンダースコアで区切られた長いキーが含まれています。基本的に、私の目標は JSON を Java オブジェクトにデシリアライズすることですが、Java コードではアンダースコアを使用しません。

たとえば、キャメル ケースのフィールドを持つUserクラスがあるとします。同時に、JSON からクラス フィールドにキーfirstNameをマップするように Jackson に指示する必要があります。出来ますか?first_namefirstName

class User{
    protected String firstName;
    protected String getFirstName(){return firstName;}
}
4

10 に答える 10

441

ObjectMapperキャメル ケースをアンダースコア付きの名前に変換するように設定できます。

objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);

または、この注釈を使用して特定のモデル クラスに注釈を付けます。

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

Jackson 2.7 より前では、定数は次のように命名されていました。

PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
于 2012-07-24T13:35:29.383 に答える
136

スプリング ブート アプリケーションの場合は、application.properties ファイルで使用します。

spring.jackson.property-naming-strategy=SNAKE_CASE

または、この注釈でモデル クラスに注釈を付けます。

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)

于 2016-11-21T22:12:56.443 に答える
129

@JsonPropertyデフォルトの名前マッピングを変更するフィールドで を使用する必要があります。

class User{
    @JsonProperty("first_name")
    protected String firstName;
    protected String getFirstName(){return firstName;}
}

詳細情報: API

于 2012-05-09T15:33:13.517 に答える
55

単一クラスにこれが必要な場合は、次のように@JsonNamingでPropertyNamingStrategyを使用できます。

@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
public static class Request {

    String businessName;
    String businessLegalName;

}

次のようにシリアライズします:

{
    "business_name" : "",
    "business_legal_name" : ""
}

Jackson 2.7LowerCaseWithUnderscoresStrategy推奨されていないためSnakeCaseStrategy、次を使用する必要があります。

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public static class Request {

    String businessName;
    String businessLegalName;

}
于 2016-09-12T23:20:21.810 に答える
4

すべてのモデルクラスに注釈を付けるのはやり過ぎのように見え、ケニーの答えはうまくいきませんでしたhttps://stackoverflow.com/a/43271115/4437153。連載の結果はやはりキャメルケースでした。

スプリングの構成に問題があることに気付いたので、別の側面からその問題に取り組む必要がありました。うまくいけば、誰かがそれを役に立つと思うでしょうが、もし私がスプリングのルールに反することをしているなら、私に知らせてください.

Spring MVC 5.2.5 および Jackson 2.11.2 のソリューション

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);           

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setObjectMapper(objectMapper);
        converters.add(converter);
    }
}
于 2020-09-03T10:07:01.643 に答える