web-dev-qa-db-ja.com

jhipsterプロジェクトのjsonでエンティティプロパティのキャメルケースをスネークケースに変換する

私はjhipsterで生成されたプロジェクトで作業しています。これはマイクロサービスアーキテクチャプロジェクトです。

私のエンティティクラスでは、プロパティはキャメルケースで名前が付けられています。したがって、RESTサービスを作成すると、jsonが提供されます。ここで、jsonプロパティ名はエンティティプロパティと同じです。

エンティティクラス

@Entity
@Table(name = "ebook")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "ebook")
public class Ebook implements Serializable {

    private Long id;
    private String nameBangla;
    private String nameEnglish;

Jsonの応答

{
   "id": 0,
   "nameBangla": "string",
   "nameEnglish": "string"
}

私のエンティティプロパティはキャメルケースになりたいのですが、jsonの応答ではスネークケースになります。つまり、エンティティクラスを変更したくないが、次のようにjson応答を変更したい

{
   "id": 0,
   "name_bangla": "string",
   "name_english": "string"
}
6

2つの可能性があります。

プロパティに明示的に名前を付ける:

@JsonProperty("name_bangla")
private String nameBangla;
@JsonProperty("name_english")
private String nameEnglish;

または、jackson(逆シリアル化/シリアル化に使用される)の動作方法を変更します。

ジャクソンには、ジャクソンオブジェクトマッパーに設定できるPropertyNamingStrategy.SNAKE_CASEという設定があります。

したがって、そのためにジャクソンを構成する必要があります。独自のオブジェクトマッパーを追加することにより:

@Configuration
public class JacksonConfiguration {

    @Bean
    public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() {
        return new Jackson2ObjectMapperBuilder().propertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
    }
} 

私の知る限り、古いバージョンのJHipsterには、JSR310タイムモジュールを構成するためのJacksonConfigurationがすでにありましたが、後で削除されました...

これをapplication.ymlに追加しても機能するはずです:

spring.jackson.property-naming-strategy=SNAKE_CASE
16
Indivon

また、アノテーションを使用して、クラスごとの命名戦略を定義できます。

Kotlinの小さな例:

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
data class Specialization(val altUrl: String, val altId: Int, val altName: String)
6
Sonique