CodeBlanks Logo Icon CodeBlanks

JsonProperty

@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

Main.java
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

Main.java
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

Soru
record User(@____("user_name") String userName, int age) {}
Cevap
record User(@JsonProperty("user_name") String userName, int age) {}

Açıklama: @JsonProperty annotation'ı record parametresine eklenir.

Orta seviye bölümündeki tüm dersler