Spring Boot MapStruct İle Nesne Transferi

İngilizce Versiyonu

İlk yazımın ne olması konusunda çok düşündüm ve son zamanlarda sürekli java spring boot ile geliştirme yaptığım ve sık kullandığım MapStruct kütüphanesini seçtim.

Giriş:

Mapstruct, çok basit bir şekilde iki farklı java nesnesini belirlediğimiz ayarlara göre maplemimizi sağlayan bir kod oluşturucudur. Yazılım geliştirirken direk entity nesnemizi çıktı olarak vermemiz güvenlik ve diğer sebeplerden önerilmez, bir diğer husus bu nesne çoğu zaman bir anlam ifade etmez ve daha anlamlı çıktıya çevirmemiz gerekir. İşte tam bu noktada Mapstruct işimizi oldukça kolaylaştırıyor.

Maven :

İlk olarak pom.xml dosyasında dependencies tagları arasına mapstruct kütüphanesini eklememiz gerekir.

Mapstructın son stabil versiyonu maven repository de bulunmaktadır. Şimdi plugin olarak maven-compiler-plugin ekleyelim. Buda yine pom.xml dosyasında plugins taglarına arasına gelecektir.

Basit Bir Örnek

Yukarıda entity nesnemizi direk response olarak ele almamızın genelde bir anlam ifade etmeyeceğinden bahsetmiştik. Şimdi basit bir ProductEntity classımızın olduğunu düşünelim.

Classımız oldukça basit ve içerisinde temel fieldlarımız var. Bir client projesinden ürünlerimiz listesini isim ve fiyatı yanında para birimi olarak string ifade şeklinde alacağımızı düşünelim. Bu durumda ProductOutput adında bir classımız olsun ve içeriği :

Gördüğünüz gibi bu yeni classımızda id, productId diye temsil ediliyor ve price decimal tipindeyken burada productPrice şeklinde string olarak ifade ediliyor. Bu durumda ProductEntity classımızı bu class tipine çevirmemiz gerektiğini anlayabiliyoruz. Tam bu noktada mapstruct bize büyük kolaylık sağlıyor. Bunun için ProductMapper adında bir interface oluşturalım.

Açıklamamız gereken şeyler mapProductEntity2Output methodu bizden source alırken dönüş tipimiz ProductOutput oluyor. Burada @Mappings annotation altında her farklı olan bir field için tanımlamalar yapabiliyoruz. qualifiedByName dediğimiz ise aslında niizim custom mappingimiz oluyor. Custom mappingde dilediğiniz kadar business işlemi yapabilirsiniz. Bu örnekte basit olarak decimal tipinde price alanımızın string tipine dönüştürülmesi ve yanına para birimini eklemeyi uyguladık. Bu method bizden source da belirtiğimiz price fieldını input olarak alıyor. Parametre isminizin bir önemi yok dilediğiniz şekilde isimlendirme yapabiliyorsunuz. Bunu yaptıktan sonra proje ana dizinine sağ tıklayıp run as diyerek maven-install yapın. Başarılı şekilde tamamlandığında mapstruct tanımladığınız interface göre generated-sources altında implementasyonunu otomatik oluşturacaktır.

Artık hazırladığımız bu methodu çağırabiliriz.

Daha fazla kod ile sizleri boğmamak adına controller kısımını atlıyorum. Bu servisimizin çıktısı aşağıdaki şekilde olacaktır.

Servis cevabı


Bu yazımda java spring boot üzerinde mapstruct kullanımı ve custom method oluşturulmasına değindim. Umarım siz de projelerinizde kullanır faydalarını hissedersiniz, tamamını okuyarak sabrettiğiniz için çok teşekkürler :)

Kaynakça 

https://mapstruct.org/
https://www.baeldung.com/mapstruct

Projenin kaynak kodlarına buradan ulaşabilirsiniz. 

 

Share this

Mustafa Baş

Mustafa Baş

Software Developer @Obss
5 yıldır remote/freelance geliştiriciyim ve #java, #.net, #.net, #javascript, #node.js teknolojileri ile çalışmalar yapıyorum. Ayrıca yeni şehirler görmeyi seviyor ve doğada kamp yapmaya bayılıyorum.

Last Reads