Saya mengambil string JSON dari internet; seperti kebanyakan JSON yang pernah saya lihat mencakup kunci-kunci panjang yang dipisahkan oleh garis bawah. Pada dasarnya, tujuan saya adalah deserialize JSON menjadi objek java, tapi saya tidak menggunakan garis bawah dalam kode java.
Sebagai contoh, saya mungkin memiliki User
kelas dengan firstName
bidang dalam camel-case, secara bersamaan saya perlu memberitahu Jackson untuk memetakan first_name
kunci dari JSON ke firstName
bidang kelas. Apa itu mungkin?
class User{
protected String firstName;
protected String getFirstName(){return firstName;}
}
Anda dapat mengonfigurasi
ObjectMapper
untuk mengonversi wadah unta ke nama dengan garis bawah:Atau anotasi kelas model tertentu dengan anotasi ini:
Sebelum Jackson 2.7, konstanta diberi nama:
sumber
@JsonProperty
(nama disimpulkan daricamelCase
properti Java normal )PropertyNamingStrategy.SNAKE_CASE
membuat deserialisasi berhenti bekerja dengan camelCase JSON (seperti yang saya gunakan) dan memerlukan snake_case.Jika ini adalah aplikasi boot semi, Dalam file application.properties, cukup gunakan
Atau Anotasi kelas model dengan anotasi ini.
sumber
spring.jackson.property-naming-strategy=SNAKE_CASE
tidak berfungsi, saya menggunakan Spring Boot 2.0ObjectMapper
tidak dibuat oleh Spring? Buat kelas @Configuration dengan metode @Bean yang mengembalikan ObjectMapper. Tidak yakin apakah ini perlu.Jika Anda menginginkan ini untuk Kelas Tunggal, Anda dapat menggunakan PropertyNamingStrategy dengan @JsonNaming , sesuatu seperti ini:
Akan bersambung ke:
Sejak
Jackson 2.7
ituLowerCaseWithUnderscoresStrategy
di usang dalam mendukungSnakeCaseStrategy
, sehingga Anda harus menggunakan:sumber
Jawaban di atas mengenai
@JsonProperty
danCAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
100% akurat, meskipun beberapa orang (seperti saya) mungkin mencoba melakukan ini di dalam aplikasi Spring MVC dengan konfigurasi berbasis kode. Berikut kode contoh (yang saya miliki di dalamBeans.java
) untuk mencapai efek yang diinginkan:sumber
application.properties
tambahkanspring.jackson.property-naming-strategy=CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
. Untuk Spring Boot 1.4 gunakanspring.jackson.property-naming-strategy=SNAKE_CASE
saja.final ObjectMapper objectMapper = new ObjectMapper().setPropertyNamingStrategy( PropertyNamingStrategy.SNAKE_CASE);
Praktik terbaik saat ini adalah mengonfigurasi Jackson di dalam
application.yml
(atauproperties
).Contoh:
Jika Anda memiliki persyaratan konfigurasi yang lebih kompleks, Anda juga dapat mengonfigurasi Jackson secara terprogram.
sumber
Ada beberapa jawaban di sini yang menunjukkan kedua strategi untuk 2 versi berbeda dari perpustakaan Jackson di bawah ini:
Untuk Jackson 2.6. *
Untuk Jackson 2.7. *
sumber