Saya memiliki objek pengguna yang dikirim ke dan dari server. Ketika saya mengirimkan objek pengguna, saya tidak ingin mengirim kata sandi hash ke klien. Jadi, saya menambahkan @JsonIgnore
pada properti kata sandi, tetapi ini juga memblokirnya dari deserialized ke kata sandi yang membuatnya sulit untuk mendaftar pengguna ketika mereka tidak mendapat kata sandi.
Bagaimana saya bisa @JsonIgnore
menerapkan serialisasi dan bukan deserialisasi? Saya menggunakan Spring JSONView, jadi saya tidak punya banyak kendali atas ObjectMapper
.
Hal yang saya coba:
- Tambahkan
@JsonIgnore
ke properti - Tambahkan
@JsonIgnore
pada metode pengambil saja
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
Untuk mencapai ini, yang kita butuhkan hanyalah dua penjelasan:
@JsonIgnore
@JsonProperty
Gunakan
@JsonIgnore
pada anggota kelas dan pengambilnya, dan@JsonProperty
pada setternya. Contoh ilustrasi akan membantu untuk melakukan ini:sumber
Karena versi 2.6: cara yang lebih intuitif adalah dengan menggunakan
com.fasterxml.jackson.annotation.JsonProperty
anotasi di lapangan:Bahkan jika pengambil ada, nilai bidang dikecualikan dari serialisasi.
JavaDoc mengatakan:
Jika Anda membutuhkannya, gunakan saja
Access.READ_ONLY
.sumber
Dalam kasus saya, saya memiliki Jackson secara otomatis (de) serialisasi objek yang saya kembali dari pengendali Spring MVC (saya menggunakan @RestController dengan Spring 4.1.6). Saya harus menggunakan
com.fasterxml.jackson.annotation.JsonIgnore
daripadaorg.codehaus.jackson.annotate.JsonIgnore
, karena jika tidak, itu tidak melakukan apa-apa.sumber
sumber
Cara mudah lain untuk menangani ini adalah dengan menggunakan argumen
allowSetters=true
dalam anotasi. Ini akan memungkinkan kata sandi untuk di-deserialisasi ke dto Anda, tetapi kata sandi itu tidak akan diserialisasi ke badan respons yang menggunakan objek berisi.contoh:
Keduanya
foo
danbar
dihuni dalam objek, tetapi hanya foo ditulis ke dalam tubuh respons.sumber