私は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"
}
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
また、アノテーションを使用して、クラスごとの命名戦略を定義できます。
Kotlinの小さな例:
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
data class Specialization(val altUrl: String, val altId: Int, val altName: String)