📦 POJO & Jackson — Tip-Safe API Testi

POJO & Jackson — Tip-Safe API Testi: Ham String JSON yazmak, bir sözleşme metnini elle kopyalayan noter gibidir: her harfi tek tek basar, yanlış yazsa imza tökezler ama kağıt kab

Ham String JSON yazmak, bir sözleşme metnini elle kopyalayan noter gibidir: her harfi tek tek basar, yanlış yazsa imza tökezler ama kağıt kabul eder — hata ancak mahkemede ortaya çıkar. POJO kullanmak ise o sözleşme metnini bir yazılım şablonuna dönüştürmek gibidir: "ad" alanını boş bırakırsan derleme aşamasında kırmızı uyarı alırsın, imzaya gitmeden önce. Peki REST Assured `body(jsonString)` ile de çalışıyor; neden POJO'ya geçmek gerekiyor? Çünkü `"email":"test@test.com "` (sondaki boşluk) gibi bir yazım hatası test'i bazen geçirir bazen geçirmez — flaky test kaynağını bulmak saatler alır. Java'da Jackson ve Lombok, `@Data @Builder` anotasyonlarıyla bunu çözer: `UserRequest.builder().email(email).build()` yaptığında IDE email alanını tamamlar ve eksik bırakırsan derleme hatası verir. QA açısından gerçek değer: POJO'nun `@JsonProperty("email_address")` anotasyonu API'nin snake_case field'ını Java camelCase değişkeninle eşler — bu uyumsuzluğu String'de yapsan `NullPointerException` alırsın; POJO'da otomatik çözülür ve response'dan parse edilen değer doğrudan assertion'a akar.

POJO Nedir? — Java Analogisi

Java'da HashMap ile String key/value sakladığında typo yapabilirsin, tip güvenliği yoktur. POJO (Plain Old Java Object) ise alan isimlerini ve tiplerini sınıf olarak tanımlamaktır — tıpkı HashMap'i type-safe hale getirmek gibi.

❌ String JSON (Kırılgan)

IDE'nin typo'yu yakalaması imkansız.

IDE anında işaretler. Refactor otomatik.

Request POJO — Lombok ile Temiz Kod

Micro Lab: REST Assured assertion yazma

TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.

@JsonInclude(NON_NULL) Doldurulmayan Alanları Nasıl Gizler?

@Data + @Builder Lombok anotasyonları…

`@Data` + `@Builder` Lombok anotasyonları, getter/setter/constructor kodunu DERLEME zamanında OTOMATİK üretir — bu kodu elle YAZMAN gerekmez, IDE'de de GÖRÜNMEZ ama derlenmiş sınıfta VARDIR.

@JsonInclude(NON_NULL) sayesinde…

`@JsonInclude(NON_NULL)` sayesinde `.name("Alice").job("QA").build()` çağrısı `firstName`/`lastName`'i JSON'a HİÇ YAZMAZ — null alanlar sessizce ATLANIR, `"firstName":null` gibi gürültü ÜRETMEZ.