JsonProperty
- Java kursu
- Orta seviye
- Ders 79/116
- 5 dk
@JsonProperty ile alan eşlemeyi öğrenirsin.
@JsonProperty ile alan adı
Metin anahtar adı Java alan adından farklı olmalıysa @JsonProperty annotation'ı kullanılır. Örneğin @JsonProperty("user_name") String userName alanı yapısal metinde user_name olarak serileşir. Bu, Java'nın camelCase ve metnin snake_case kullandığı API'lerde yararlıdır.
Record'larda annotation yapıcı parametreye eklenir: record User(@JsonProperty("user_name") String userName, int age) {}. Jackson hem serileştirme hem de okuma sırasında bu adı kullanır. Böylece aynı sınıf farklı metin biçimleriyle uyumlu olur.
Record ve POJO farkı
Record'lar değişmez (immutable) veri taşır; setter içermez. POJO'lar ise mutable alanlar ve getter/setter çiftleri sunar. Jackson her ikisini de destekler; record'lar daha kısa ve güvenlidir.
Bir POJO'da Jackson getter adlarından anahtar üretir: getUserName() metodu userName anahtarına dönüşür. Record'larda ise alan adı doğrudan kullanılır. Yeni kodlarda record tercih edilir.
Uygulama @JsonProperty ile User tanımla
record User(@JsonProperty("user_name") String userName, @JsonProperty("user_age") int userAge) {} tanımla. main içine throws Exception ekle. ObjectMapper mapper = new ObjectMapper(); oluştur, User u = new User("Ayşe", 30); ile bir kullanıcı üret, String text = mapper.writeValueAsString(u); ile metin üret ve System.out.println(text); yazdır.
Başlangıç kodu
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonProperty;
// User record: @JsonProperty ile user_name ve user_age
public class Main {
public static void main(String[] args) throws Exception {
// ObjectMapper, User örneği, writeValueAsString ve println
}
}Örnek çözüm
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonProperty;
record User(@JsonProperty("user_name") String userName, @JsonProperty("user_age") int userAge) {}
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
User u = new User("Ayşe", 30);
String text = mapper.writeValueAsString(u);
System.out.println(text);
}
}Beklenen çıktı
{"user_name":"Ayşe","user_age":30}
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 @JsonProperty kullanımlarını eşleştir
| Kavram | Anlamı |
|---|---|
@JsonProperty("user_name") |
Anahtar adını özelleştirir |
camelCase |
Java alan adı geleneği |
snake_case |
Metin anahtar adı geleneği |
record parametresi |
Annotation'ın yeri |
2 @JsonProperty("user_name") ne yapar?
- Metin anahtar adını user_name yapar Doğru cevap
- Alanı gizler
- Alanı final yapar
- Alanı static yapar
Açıklama: @JsonProperty metin anahtar adını belirler.
3 @JsonProperty kullanımını tamamla
record User(@____("user_name") String userName, int age) {}
record User(@JsonProperty("user_name") String userName, int age) {}
Açıklama: @JsonProperty annotation'ı record parametresine eklenir.