{"id":6108,"date":"2023-06-26T11:17:44","date_gmt":"2023-06-26T11:17:44","guid":{"rendered":"https:\/\/bentego.com\/java-spring-boot-ile-rest-servisi-olusturmak\/"},"modified":"2023-06-26T11:17:44","modified_gmt":"2023-06-26T11:17:44","slug":"java-spring-boot-ile-rest-servisi-olusturmak","status":"publish","type":"post","link":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/","title":{"rendered":"Java Spring Boot ile REST Servisi Olu\u015fturmak"},"content":{"rendered":"<p>Yaz\u0131n\u0131n i\u00e7eri\u011fi SOAP ile REST servisler aras\u0131ndaki farklar, Spring framework ile SpringBoot aras\u0131ndaki farklar, annotation \u00f6rnekleri, Hibernate ve Lombok framework kullan\u0131m\u0131ndan olu\u015fmaktad\u0131r ve \u00f6rnek bir proje ile sonlanmaktad\u0131r. Keyifli okumalar dilerim. <\/p>\n<p>REST (Representational State Transfer), modern web uygulamalar\u0131nda pop\u00fcler bir mimari stilidir. Bu blog yaz\u0131s\u0131nda, Java Spring Boot kullanarak nas\u0131l bir REST servisi olu\u015fturabilece\u011finizi ad\u0131m ad\u0131m g\u00f6sterece\u011fim. Ayr\u0131ca Spring Boot kullan\u0131rken atlanmamas\u0131 gereken baz\u0131 noktalara da dikkat \u00e7ekece\u011fim.  <\/p>\n<p>1. SOAP Servisler ile REST Servisler Aras\u0131ndaki Farklar<\/p>\n<p>SOAP (Simple Object Access Protocol) ve REST (Representational State Transfer) servislerinin kendine \u00f6zg\u00fc avantajlar\u0131 vard\u0131r. Bunlar\u0131 a\u015fa\u011f\u0131daki \u015fekilde s\u0131ralayabiliriz. <\/p>\n<ul>\n<li>Veri Format\u0131:<br \/>\nSOAP: XML (eXtensible Markup Language) format\u0131n\u0131 kullan\u0131r.<br \/>\nREST: Genellikle JSON (JavaScript Object Notation) format\u0131n\u0131 kullan\u0131r.<\/li>\n<li>Veri Ta\u015f\u0131ma:<br \/>\nSOAP: Genellikle HTTP, SMTP, TCP gibi protokolleri kullan\u0131r. Veri ta\u015f\u0131ma i\u00e7in XML&#8217;in \u00fczerine bir protokol katman\u0131 eklenmelidir.<br \/>\nREST: HTTP protokol\u00fcn\u00fc kullan\u0131r. Veriler, HTTP metotlar\u0131 (GET, POST, PUT, DELETE) ve URL yap\u0131lar\u0131 ile ta\u015f\u0131n\u0131r.  <\/li>\n<li>Aray\u00fcz ve Tan\u0131mlama:<br \/>\nSOAP: WSDL (Web Services Description Language) dosyalar\u0131n\u0131 kullanarak servislerin tan\u0131mlanmas\u0131 ve ara y\u00fczlerin belirlenmesi i\u00e7in ayr\u0131nt\u0131l\u0131 bir yap\u0131ya sahiptir.<br \/>\nREST: HTTP metotlar\u0131yla \u00e7al\u0131\u015f\u0131r. Servislerin ve verilerin tan\u0131mlanmas\u0131 i\u00e7in herhangi bir standart belgeye ihtiya\u00e7 duymaz. <\/li>\n<li>Veri \u0130leti\u015fimi:<br \/>\nSOAP: G\u00fcvenlik, b\u00fct\u00fcnl\u00fck ve hata y\u00f6netimi gibi konularda daha fazla standartla\u015fm\u0131\u015f \u00f6zelliklere sahiptir.<br \/>\nREST: HTTP protokol\u00fcn\u00fc kullanarak veri iletimini ger\u00e7ekle\u015ftirir. Basit, hafif ve do\u011frudan bir ileti\u015fim sa\u011flar. <\/li>\n<\/ul>\n<p>&#8211; SOAP servisler, karma\u015f\u0131k ve yap\u0131sal olarak tan\u0131mlanm\u0131\u015f verilerin ta\u015f\u0131nd\u0131\u011f\u0131 i\u015flemlere y\u00f6neliktir. \u00d6zellikle, g\u00fcvenlik, b\u00fct\u00fcnl\u00fck ve hata y\u00f6netimi gibi konular\u0131n \u00f6nemli oldu\u011fu durumlarda tercih edilebilir.<br \/>\n&#8211; REST servisler, daha basit ve hafif veri ta\u015f\u0131ma ihtiya\u00e7lar\u0131 i\u00e7in uygundur. Genellikle, kaynaklar \u00fczerinde CRUD (Olu\u015ftur, Oku, G\u00fcncelle, Sil) operasyonlar\u0131 ger\u00e7ekle\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Web, mobil ve IoT uygulamalar\u0131 i\u00e7in tercih edilebilir.  <\/p>\n<p>2. Java Spring Framework ile Spring Boot Aras\u0131ndaki Farklar<\/p>\n<p>Java Spring Framework, geli\u015ftiricilere geni\u015f bir yelpazede \u00f6zellikler sunan kapsaml\u0131 bir uygulama \u00e7er\u00e7evesidir ve Java EE (Enterprise Edition) uygulamalar\u0131n\u0131n geli\u015ftirilmesi i\u00e7in kullan\u0131l\u0131r. Ancak, Spring&#8217;in yap\u0131land\u0131rma ve ba\u015flatma s\u00fcre\u00e7leri karma\u015f\u0131k olabilir. Spring Boot ise, Spring Framework \u00fczerine in\u015fa edilmi\u015f bir projedir ve otomatik yap\u0131land\u0131rma, h\u0131zl\u0131 ba\u015flatma se\u00e7enekleri sunar. Spring Boot, yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.   <\/p>\n<p>3 SpringBoot ile Ek A\u00e7\u0131klama Kullan\u0131m\u0131 ve \u00d6rnekler<\/p>\n<p>Spring Boot, uygulama geli\u015ftirmeyi h\u0131zland\u0131ran ve yap\u0131land\u0131rmay\u0131 kolayla\u015ft\u0131ran bir dizi \u00f6zel annotation (i\u015faret\u00e7i) sunar. Bu annotation&#8217;lar, geli\u015ftirdi\u011fimiz uygulaman\u0131n davran\u0131\u015f\u0131n\u0131 belirlemek ve \u00e7e\u015fitli ayarlar\u0131 yap\u0131land\u0131rmak i\u00e7in kullan\u0131l\u0131r. \u0130\u015fte baz\u0131 \u00f6nemli Spring Boot annotation&#8217;lar\u0131 ve i\u015flevleri:  <\/p>\n<ul>\n<li>@SpringBootApplication: Bu annotation, bir Spring Boot uygulamas\u0131n\u0131n ana s\u0131n\u0131f\u0131 \u00fczerine eklenir. Uygulamay\u0131 ba\u015flatmak i\u00e7in kullan\u0131l\u0131r ve ayn\u0131 zamanda @Configuration, @EnableAutoConfiguration ve @ComponentScan ek a\u00e7\u0131klama&#8217;lar\u0131n\u0131 i\u00e7erir. <\/li>\n<li>RestController: Bu annotation, bir s\u0131n\u0131f\u0131n RESTful hizmetler sunan bir kontrolc\u00fc s\u0131n\u0131f oldu\u011funu belirtir. Herhangi bir HTTP iste\u011fine yan\u0131t verebilecek metotlar\u0131 i\u00e7eren s\u0131n\u0131flara uygulan\u0131r. <\/li>\n<li>@RequestMapping: Bu annotation, bir metodun veya s\u0131n\u0131f\u0131n hangi URL&#8217;ye ve HTTP metoduyla e\u015fle\u015fti\u011fini belirtir. \u00d6rne\u011fin, @RequestMapping(value = &#8220;\/users&#8221;, method = RequestMethod.GET) \u015feklinde kullan\u0131larak &#8220;\/users&#8221; URL&#8217;sine GET iste\u011fi yap\u0131ld\u0131\u011f\u0131nda ilgili metotun \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. <\/li>\n<li>@Autowired: Bu a\u00e7\u0131klama, ba\u011f\u0131ml\u0131l\u0131klar\u0131n otomatik olarak enjekte edilmesini sa\u011flar.<\/li>\n<li>@Configuration: Bu annotation, bir s\u0131n\u0131f\u0131n yap\u0131land\u0131rma s\u0131n\u0131f\u0131 oldu\u011funu belirtir. Bean&#8217;leri olu\u015fturmak ve yap\u0131land\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bu annotation&#8217;a sahip bir s\u0131n\u0131f, @Bean annotation&#8217;\u0131 kullanarak bean&#8217;lerin olu\u015fturdu\u011fu metodlar\u0131 i\u00e7ermelidir.  <\/li>\n<li>EnableAutoConfiguration: Bu annotation, otomatik yap\u0131land\u0131rma \u00f6zelli\u011fini etkinle\u015ftirir. Spring Boot, ba\u011f\u0131ml\u0131l\u0131klara ve yap\u0131land\u0131rmaya dayanarak uygulaman\u0131n \u00e7o\u011fu ayar\u0131n\u0131 otomatik olarak yapar. <\/li>\n<li>@ComponentScan: Bu ek a\u00e7\u0131klama, Spring&#8217;in bile\u015fen tarama i\u015flemini belirler. Projenin paket yap\u0131s\u0131n\u0131 tarayarak bile\u015fenleri bulmas\u0131n\u0131 sa\u011flar. Bu annotation&#8217;\u0131 kullanarak Spring, bile\u015fenlerin (kontrolc\u00fcler, servisler, vb.) otomatik olarak tan\u0131mlanmas\u0131n\u0131 sa\u011flar.  <\/li>\n<li>PathVariable: URL&#8217;deki de\u011fi\u015fkenleri i\u015flem metotlar\u0131na parametre olarak aktarmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li>@RequestParam: HTTP sorgu parametrelerini i\u015flem metotlar\u0131na parametre olarak aktarmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li>RequestBody: HTTP iste\u011fi g\u00f6vdesindeki verileri i\u015flem metotlar\u0131na parametre olarak aktarmak i\u00e7in kullan\u0131l\u0131r. Genellikle JSON veya XML format\u0131nda gelen verileri deserializasyon i\u00e7in kullan\u0131l\u0131r. <code><br \/>\n@PostMapping(\"\/example\")<br \/>\npublic String createExample(@RequestBody ExampleData data) {<br \/>\n\/\/ \u2026<br \/>\n}<\/code><\/li>\n<li>@Component: Spring taraf\u0131ndan y\u00f6netilen bir bile\u015fen oldu\u011funu belirtmek i\u00e7in kullan\u0131l\u0131r. Genellikle s\u0131n\u0131flar\u0131n fasulye olarak tan\u0131mlanmas\u0131 i\u00e7in kullan\u0131l\u0131r. <\/li>\n<li>@PostMapping: HTTP POST iste\u011fi i\u00e7in bir i\u015flem metotunu i\u015faretlemek i\u00e7in kullan\u0131l\u0131r.<br \/>\n&#8211; Parametreler:<br \/>\n&#8211; `value` (veya `path`): \u0130ste\u011fi i\u015fleyecek URL yolunu belirtir. Dize tipindedir.<br \/>\n&#8211; &#8220;t\u00fcketir&#8221;: \u0130ste\u011fin kabul edebilece\u011fi medya tiplerini belirtir. String dizisi olarak verilir.<br \/>\n&#8211; &#8220;\u00fcretir&#8221;: Yan\u0131t\u0131n \u00fcretebilece\u011fi medya tiplerini belirtir. String dizisi olarak verilir. <\/li>\n<li>@GetMapping: HTTP GET iste\u011fi i\u00e7in bir i\u015flem metotunu i\u015faretlemek i\u00e7in kullan\u0131l\u0131r.<br \/>\n&#8211; Parametreler:<br \/>\n&#8211; `value` (veya `path`): \u0130ste\u011fi i\u015fleyecek URL yolunu belirtir. Dize tipindedir.<br \/>\n&#8211; &#8220;\u00fcretir&#8221;: Yan\u0131t\u0131n \u00fcretebilece\u011fi medya tiplerini belirtir. String dizisi olarak verilir. <\/li>\n<li>@PutMapping: HTTP PUT iste\u011fi i\u00e7in bir i\u015flem metotunu i\u015faretlemek i\u00e7in kullan\u0131l\u0131r.<br \/>\n&#8211; Parametreler:<br \/>\n&#8211; `value` (veya `path`): \u0130ste\u011fi i\u015fleyecek URL yolunu belirtir. Dize tipindedir.<br \/>\n&#8211; &#8220;t\u00fcketir&#8221;: \u0130ste\u011fin kabul edebilece\u011fi medya tiplerini belirtir. String dizisi olarak verilir.<br \/>\n&#8211; &#8220;\u00fcretir&#8221;: Yan\u0131t\u0131n \u00fcretebilece\u011fi medya tiplerini belirtir. String dizisi olarak verilir. <\/li>\n<li>@DeleteMapping: HTTP DELETE iste\u011fi i\u00e7in bir i\u015flem metotunu i\u015faretlemek i\u00e7in kullan\u0131l\u0131r.<br \/>\n&#8211; Parametreler:<br \/>\n&#8211; `value` (veya `path`): \u0130ste\u011fi i\u015fleyecek URL yolunu belirtir. Dize tipindedir.<br \/>\n&#8211; &#8220;\u00fcretir&#8221;: Yan\u0131t\u0131n \u00fcretebilece\u011fi medya tiplerini belirtir. String dizisi olarak verilir. <\/li>\n<\/ul>\n<p>5. Hibernate&#8217;in \u00d6nemi ve Kullan\u0131m\u0131<\/p>\n<p>Hibernate, Java uygulamalar\u0131nda veritaban\u0131 i\u015flemlerini kolayla\u015ft\u0131ran pop\u00fcler bir nesne ili\u015fkisel e\u015fleme (ORM) \u00e7er\u00e7evesidir. Hibernate, veritaban\u0131 tablolar\u0131 ile Java s\u0131n\u0131flar\u0131 aras\u0131ndaki ili\u015fkiyi y\u00f6netir ve veritaban\u0131 i\u015flemlerini nesne odakl\u0131 bir \u015fekilde ger\u00e7ekle\u015ftirmenizi sa\u011flar. REST servislerinde Hibernate, veritaban\u0131 entegrasyonunu kolayla\u015ft\u0131r\u0131r ve CRUD i\u015flemlerini basitle\u015ftirir.  <\/p>\n<p>Hibernate&#8217;in \u00f6nemi ve kullan\u0131m\u0131 a\u015fa\u011f\u0131daki \u015fekilde s\u0131ralanm\u0131\u015ft\u0131r;<\/p>\n<ul>\n<li>Nesne Tabanl\u0131 Veritaban\u0131 Etkile\u015fimi: Hibernate, Java s\u0131n\u0131flar\u0131n\u0131 veritaban\u0131 tablolar\u0131yla e\u015fle\u015ftirmenizi sa\u011flar. Bu \u015fekilde, veritaban\u0131 i\u015flemleri daha kolay ve sade bir \u015fekilde ger\u00e7ekle\u015ftirilebilir. <\/li>\n<li>ORM Kolayl\u0131\u011f\u0131: Hibernate, SQL sorgular\u0131n\u0131 manuel olarak olu\u015fturmak yerine nesne tabanl\u0131 sorgularla \u00e7al\u0131\u015fman\u0131za olanak tan\u0131r. Bu sayede veritaban\u0131 i\u015flemlerini daha h\u0131zl\u0131 ve daha az hata ile ger\u00e7ekle\u015ftirilebilir. <\/li>\n<li>Veritaban\u0131 Ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131: Hibernate, farkl\u0131 veritaban\u0131 sistemleriyle \u00e7al\u0131\u015fabilme esnekli\u011fi sa\u011flar. Ayn\u0131 Hibernate kodunu kullanarak farkl\u0131 veritaban\u0131 sistemlerine (Oracle, MySQL, PostgreSQL vb.) uyumlu uygulamalar geli\u015ftirilebilir.<br \/>\nSpring Boot projelerinde Hibernate kullanmak i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izlenir: <\/li>\n<\/ul>\n<p>5.1. Pom.xml Dosyas\u0131na Ekleni\u015f Bi\u00e7imi:<\/p>\n<p>Hibernate&#8217;i Spring Boot projesine eklemek i\u00e7in Maven veya Gradle gibi proje y\u00f6netim ara\u00e7lar\u0131n\u0131 kullanabilirsiniz.<br \/>\n<img decoding=\"async\" class=\"alignnone size-medium wp-image-5267\" src=\"https:\/\/bentego.com\/wp-content\/uploads\/2023\/06\/pomhibernate-300x140.png\" alt=\"\" width=\"300\" height=\"140\"><\/p>\n<p>5.2. Hibernate ile Veritaban\u0131 Yap\u0131land\u0131rmas\u0131:<\/p>\n<p>Hibernate kullanarak veritaban\u0131na eri\u015fmek i\u00e7in, veritaban\u0131 ba\u011flant\u0131 bilgilerini ve yap\u0131land\u0131rmas\u0131n\u0131 Spring Boot&#8217;un application.properties (veya application.yml) dosyas\u0131nda belirtmelidir. \u00d6rne\u011fin, PostgreSQL veritaban\u0131 i\u00e7in bir \u00f6rnek yap\u0131land\u0131rma a\u015fa\u011f\u0131da bulunmaktad\u0131r. <\/p>\n<p># application.properties<code><br \/>\nspring.datasource.url=jdbc:postgresql:\/\/localhost:5432\/mydatabase<br \/>\nspring.datasource.username=db_username<br \/>\nspring.datasource.password=db_password<br \/>\nspring.jpa.hibernate.ddl-auto=update<br \/>\nspring.jpa.show-sql=true<\/code><\/p>\n<p>5.3. Hibernate Varl\u0131k S\u0131n\u0131f\u0131 Olu\u015fturma:<\/p>\n<p>Hibernate kullanarak bir veritaban\u0131 tablosunu temsil eden bir Java s\u0131n\u0131f\u0131 olu\u015fturman\u0131z gerekmektedir. Bu s\u0131n\u0131f @Entity annotation&#8217;\u0131 ile i\u015faretlenerek ve @Id, @GeneratedValue gibi Hibernate annotation&#8217;lar\u0131n\u0131 kullanarak anahtar s\u00fctunlar\u0131 ve di\u011fer s\u00fctunlar\u0131 tan\u0131mlanmal\u0131d\u0131r. <\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-medium wp-image-5268\" src=\"https:\/\/bentego.com\/wp-content\/uploads\/2023\/06\/codehier-300x223.png\" alt=\"\" width=\"300\" height=\"223\"><\/p>\n<p>Bu \u015fekilde Hibernate&#8217;i Spring Boot projesine ekleyebilir ve Hibernate ile veritaban\u0131 etkile\u015fimini sa\u011flayan s\u0131n\u0131flar\u0131 olu\u015fturulabilir. Daha sonra bu s\u0131n\u0131flar\u0131 Rest servislerinizde kullanarak veritaban\u0131 i\u015flemlerini ger\u00e7ekle\u015ftirilebilir. <\/p>\n<p>6. Lombok \u00e7er\u00e7evesi:<\/p>\n<p>Lombok, Java projelerinde kod tekrar\u0131n\u0131 azaltmak ve daha fazla okunabilir, sade ve bak\u0131m\u0131 kolay kodlar yazmay\u0131 sa\u011flayan bir Java k\u00fct\u00fcphanesidir. Lombok, s\u0131n\u0131flarda getter, setter, equals, hashCode, toString gibi yayg\u0131n kod par\u00e7alar\u0131n\u0131 otomatik olarak \u00fcretir ve bu sayede geli\u015ftiricilerin bu kodlar\u0131 elle yazma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.Lombok&#8217;un sa\u011flad\u0131\u011f\u0131 di\u011fer anotasyonlar ve baz\u0131lar\u0131n\u0131 a\u015fa\u011f\u0131da bulabilirsiniz. <\/p>\n<p>1. Getter\/@Setter: Bu annotation&#8217;lar, s\u0131n\u0131f\u0131n t\u00fcm alanlar\u0131 i\u00e7in getter ve setter metodlar\u0131n\u0131 otomatik olarak olu\u015fturur. Bu sayede s\u0131n\u0131f i\u00e7erisinde tekrarlay\u0131c\u0131 getter\/setter metotlar\u0131n\u0131 elle yazmak zorunda kalmazs\u0131n\u0131z. <\/p>\n<p>2. NoArgsConstructor\/@AllArgsConstructor: Bu annotation&#8217;lar, parametresiz bir yap\u0131c\u0131 metot veya t\u00fcm alanlar\u0131 i\u00e7eren bir yap\u0131c\u0131 metot otomatik olarak olu\u015fturur. Bu sayede s\u0131n\u0131f\u0131n nesnelerini olu\u015ftururken tekrarlay\u0131c\u0131 yap\u0131c\u0131 metotlar\u0131 elle yazmak zorunda kalmazs\u0131n\u0131z. <\/p>\n<p>3. @Data: Bu annotation, @Getter, @Setter, @ToString, @EqualsAndHashCode ve @RequiredArgsConstructor annotation&#8217;lar\u0131n\u0131 birle\u015ftirir. S\u0131n\u0131f i\u00e7in t\u00fcm bu tekrarlay\u0131c\u0131 metotlar\u0131 otomatik olarak olu\u015fturur. <\/p>\n<p>A\u015fa\u011f\u0131da Pom dosyas\u0131na nas\u0131l eklenmesi gerekti\u011fi g\u00f6sterilmi\u015ftir.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-medium wp-image-5269\" src=\"https:\/\/bentego.com\/wp-content\/uploads\/2023\/06\/lombokpom-300x143.png\" alt=\"\" width=\"300\" height=\"143\"><\/p>\n<p><code><\/code><\/p>\n<p><!-- Di\u011fer ba\u011f\u0131ml\u0131l\u0131klar --><\/p>\n<p><!-- Di\u011fer ba\u011f\u0131ml\u0131l\u0131klar --><\/p>\n<p>7. Postac\u0131 Kullan\u0131m\u0131<\/p>\n<p>REST servislerini test etmek i\u00e7in Postman gibi bir ara\u00e7 kullanabilirsiniz. Postman, HTTP isteklerini kolayca olu\u015fturman\u0131za ve g\u00f6ndermenize olanak tan\u0131r. \u00d6rne\u011fin, UserController&#8217;da tan\u0131mlanan `\/users&#8217; endpoint&#8217;ini test etmek i\u00e7in Postman&#8217;da bir GET veya POST iste\u011fi olu\u015fturabilir ve sonucu incelenebilir.  <\/p>\n<p>Postman&#8217;da istek olu\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki \u015fekilde istek ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131lmal\u0131:<\/p>\n<p>HTTP metodu (GET, POST, PUT, DELETE) se\u00e7in ve URL&#8217;yi belirtin.<br \/>\nBa\u015fl\u0131klar (Ba\u015fl\u0131klar): \u0130stek ba\u015fl\u0131klar\u0131n\u0131 gerekti\u011finde ekleyin. \u00d6rne\u011fin, &#8220;Content-Type&#8221; ba\u015fl\u0131\u011f\u0131 &#8220;application\/json&#8221; olarak ayarlanabilir.<br \/>\nBody (G\u00f6vde): E\u011fer bir POST veya PUT iste\u011fi yap\u0131yorsan\u0131z, veriyi body (g\u00f6vde) b\u00f6l\u00fcm\u00fcnde belirtin. \u00d6rne\u011fin, JSON format\u0131nda bir veri g\u00f6ndermek i\u00e7in &#8220;raw&#8221; se\u00e7ene\u011fini se\u00e7in ve JSON verisini girin.  <\/p>\n<p>8. \u00d6rnek Proje: Adres Bilgisi \u00c7eken REST Servisi<\/p>\n<p>A\u015fa\u011f\u0131da, bir REST servisi \u00f6rne\u011fi verilmi\u015ftir. Bu \u00f6rnek, kullan\u0131c\u0131n\u0131n sorgusunda kulland\u0131\u011f\u0131 adres bilgisini \u00e7eker ve bu adres bilgisini kullanarak tamamen \u00fccretsiz bir platform olan OpenStreetMap API sine ba\u011flanarak lokasyon verisini \u00e7ekip bu veriyi m\u00fc\u015fteriye d\u00f6nen bir servistir. <\/p>\n<p>Pom XML:<\/p>\n<p><span style=\"font-weight: 400;\">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&lt;proje xmlns=&#8221;http:\/\/maven.apache.org\/POM\/4.0.0&#8243;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">  xmlns:xsi=&#8221;http:\/\/www.w3.org\/2001\/XMLSchema-instance&#8221;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">  xsi:schemaLocation=&#8221;http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd&#8221;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;groupId&gt;com.example&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;artifactId&gt;my-project&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;\u00d6zellikler&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;java.version&gt;1.8&lt;\/java.version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;spring-boot.version&gt;2.5.2&lt;\/spring-boot.version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;lombok.version&gt;1.18.20&lt;\/lombok.version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;hibernate.version&gt;5.4.32.Final&lt;\/hibernate.version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;\/properties&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;ba\u011f\u0131ml\u0131l\u0131klar&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;!&#8211; Spring Boot Ba\u015flang\u0131\u00e7 Web &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;BA\u011eIMLILIK&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;version&gt;${spring-boot.version}&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/dependency&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;!&#8211; Spring Boot Ba\u015flang\u0131\u00e7 Verileri JPA &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;BA\u011eIMLILIK&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;artifactId&gt;spring-boot-starter-data-jpa&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;version&gt;${spring-boot.version}&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/dependency&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;!&#8211; H2 Veritaban\u0131 &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;BA\u011eIMLILIK&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;groupId&gt;com.h2database&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;artifactId&gt;h2&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;version&gt;1.4.200&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/dependency&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;!&#8211; Lombok &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;BA\u011eIMLILIK&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;groupId&gt;org.projectlombok&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;artifactId&gt;lombok&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;version&gt;${lombok.version}&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;kapsam&gt;sa\u011flanan&lt;\/kapsam&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/dependency&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;!&#8211; Hibernate \u00c7ekirde\u011fi &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;BA\u011eIMLILIK&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;version&gt;${hibernate.version}&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/dependency&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;!&#8211; JSON \u0130\u015fleme API&#8217;si &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;BA\u011eIMLILIK&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;groupId&gt;javax.json&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;artifactId&gt;javax.json-api&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;version&gt;1.1.4&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/dependency&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;!&#8211; Jersey M\u00fc\u015fterisi &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;BA\u011eIMLILIK&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;groupId&gt;org.glassfish.jersey.core&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;artifactId&gt;jersey-client&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;s\u00fcr\u00fcm&gt;2.34&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/dependency&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;\/dependencies&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;in\u015fa etmek&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;eklentiler&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;!&#8211; Maven Derleyici Eklentisi &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;eklenti&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;groupId&gt;org.apache.maven.plugins&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;s\u00fcr\u00fcm&gt;3.8.1&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;yap\u0131land\u0131rma&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                    &lt;source&gt;${java.version}&lt;\/source&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                    &lt;target&gt;${java.version}&lt;\/target&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;\/configuration&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;\/plugin&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;!&#8211; Spring Boot Maven Eklentisi &#8211;&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;eklenti&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;artifactId&gt;spring-boot-maven-plugin&lt;\/artifactId&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">                &lt;version&gt;${spring-boot.version}&lt;\/version&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">            &lt;\/plugin&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">        &lt;\/plugins&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">    &lt;\/build&gt;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">&lt;\/project&gt;<\/span><\/p>\n<p>Adres Varl\u0131k S\u0131n\u0131f\u0131:<\/p>\n<p><span class=\"hljs-keyword\">import<\/span> javax.persistence.Entity;<br \/>\n<span class=\"hljs-keyword\">import<\/span> javax.persistence.GeneratedValue;<br \/>\n<span class=\"hljs-keyword\">import<\/span> javax.persistence.GenerationType;<br \/>\n<span class=\"hljs-keyword\">import<\/span> javax.persistence.Id;<br \/>\n<span class=\"hljs-keyword\">import<\/span> lombok.Data;<\/p>\n<p><span class=\"hljs-meta\">@Entity<\/span><br \/>\n<span class=\"hljs-meta\">@Veri<\/span><br \/>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title.class\">Adres<\/span> {<br \/>\n<span class=\"hljs-meta\">Kimlik<\/span><br \/>\n<span class=\"hljs-meta\">@GeneratedValue(strategy = GenerationType.IDENTITY)<\/span><br \/>\n<span class=\"hljs-keyword\">private<\/span> Long id;<\/p>\n<p><span class=\"hljs-keyword\">private<\/span> String adres;<br \/>\n<span class=\"hljs-keyword\">private<\/span> String haritaLink;<br \/>\n}<\/p>\n<p>Adres Depo S\u0131n\u0131f\u0131:<\/p>\n<p><span class=\"hljs-keyword\">import<\/span> org.springframework.data.jpa.repository.JpaRepository;<br \/>\n<span class=\"hljs-keyword\">import<\/span> org.springframework.stereotype.Repository;<\/p>\n<p><span class=\"hljs-meta\">@Repository<\/span><br \/>\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">interface<\/span> <span class=\"hljs-title.class\">AdresRepository<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title.class\">JpaRepository<\/span>&lt;Adres, Long&gt; {<br \/>\nAdres <span class=\"hljs-title.function\">findByAdres<\/span><span class=\"hljs-params\">(String adres)<\/span>;<br \/>\n}<\/p>\n<p>Adres Servis S\u0131n\u0131f\u0131:<br \/>\n<code><br \/>\nimport org.springframework.beans.factory.annotation.Autowired;<br \/>\nimport org.springframework.stereotype.Service;<br \/>\nimport org.springframework.web.client.RestTemplate;<br \/>\nimport javax.json.*;<\/code><br \/>\n<code><br \/>\n@Service<br \/>\npublic class AdresServis {<br \/>\nprivate final AdresRepository adresRepository;<br \/>\n<\/code><code><br \/>\n@Autowired<br \/>\npublic AdresServis(AdresRepository adresRepository) {<br \/>\nthis.adresRepository = adresRepository;<br \/>\n}<\/code><br \/>\n<code><br \/>\npublic String getHaritaLink(String adres) {<br \/>\nAdres bulunanAdres = adresRepository.findByAdres(adres);<br \/>\nif (bulunanAdres != null) {<br \/>\nreturn bulunanAdres.getHaritaLink();<br \/>\n} else {<br \/>\nString haritaLink = getHaritaLinkFromAPI(adres);<br \/>\nAdres yeniAdres = new Adres();<br \/>\nyeniAdres.setAdres(adres);<br \/>\nyeniAdres.setHaritaLink(haritaLink);<br \/>\nadresRepository.save(yeniAdres);<br \/>\nreturn haritaLink;<br \/>\n}<br \/>\n}<\/code><code><br \/>\nprivate String getHaritaLinkFromAPI(String adres) {<br \/>\nString haritaLink = \"\";<br \/>\ntry {<br \/>\nURIBuilder uriBuilder = new URIBuilder(\"https:\/\/nominatim.openstreetmap.org\/search\");<br \/>\nuriBuilder.addParameter(\"format\", \"json\");<br \/>\nuriBuilder.addParameter(\"q\", adres);<\/code><br \/>\n<code><br \/>\nURI uri = uriBuilder.build();<br \/>\n<\/code><code><br \/>\nHttpClient httpClient = HttpClientBuilder.create().build();<br \/>\nHttpGet request = new HttpGet(uri);<br \/>\nBufferedReader reader = new BufferedReader(new InputStreamReader(httpClient.execute(request).getEntity().getContent()));<br \/>\n<\/code><code><br \/>\nStringBuilder response = new StringBuilder();<br \/>\nString line;<br \/>\nwhile ((line = reader.readLine()) != null) {<br \/>\nresponse.append(line);<br \/>\n}<br \/>\nJsonArray jsonArray = JsonParser.parseString(response.toString()).getAsJsonArray();<br \/>\n<\/code><code><br \/>\nif (jsonArray.size() &gt; 0) {<br \/>\nJsonObject firstResult = jsonArray.get(0).getAsJsonObject();<br \/>\nharitaLink = firstResult.get(\"url\").getAsString();<br \/>\n}<br \/>\n} catch (Exception e) {<br \/>\ne.printStackTrace();<br \/>\n}<br \/>\n<\/code><code><br \/>\nreturn haritaLink;<br \/>\n}<br \/>\n}<\/code><\/p>\n<p>Adres Kontrolc\u00fc S\u0131n\u0131f\u0131:<br \/>\n<code><br \/>\nimport org.springframework.beans.factory.annotation.Autowired;<br \/>\nimport org.springframework.web.bind.annotation.GetMapping;<br \/>\nimport org.springframework.web.bind.annotation.PathVariable;<br \/>\nimport org.springframework.web.bind.annotation.RequestMapping;<br \/>\nimport org.springframework.web.bind.annotation.RestController;<\/code><br \/>\n<code><br \/>\n@RestController<br \/>\n@RequestMapping(\"\/adresler\")<br \/>\npublic class AdresKontrolcu {<br \/>\nprivate final AdresServis adresServis;<br \/>\n<\/code><code><br \/>\n@Autowired<br \/>\npublic AdresKontrolcu(AdresServis adresServis) {<br \/>\nthis.adresServis = adresServis;<br \/>\n}<br \/>\n<\/code><code><br \/>\n@GetMapping<br \/>\npublic String getAdresHaritaLink(@RequestParam(\"adres\") String adres) {<br \/>\nString haritaLink = adresServis.getHaritaLink(adres);<br \/>\nreturn \"Adres: \" + adres + \", Harita Linki: \" + haritaLink;<br \/>\n}<br \/>\n}<\/code><\/p>\n<p>Postac\u0131 Sorgusu:<br \/>\n&#8211; \u0130stek Y\u00f6ntemi: GET<br \/>\n&#8211; URL: `http:\/\/localhost:8080\/adresler?adres=Ankara`<br \/>\nPostac\u0131 \u00c7\u0131kt\u0131s\u0131:<br \/>\nAdres: Ankara, Harita Linki: &#8216;&#8221;https:\/\/www.openstreetmap.org\/?lat=39.9334&amp;lon=32.8597&amp;zoom=12&amp;layers=M&#8221;&#8216;<\/p>\n<p>Umar\u0131m yukar\u0131da payla\u015ft\u0131\u011f\u0131m bilgiler sizlere yard\u0131mc\u0131 olmu\u015ftur.<br \/>\nBa\u015far\u0131lar dilerim!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yaz\u0131n\u0131n i\u00e7eri\u011fi SOAP ile REST servisler aras\u0131ndaki farklar, Spring framework ile SpringBoot aras\u0131ndaki farklar, annotation \u00f6rnekleri, Hibernate ve Lombok framework kullan\u0131m\u0131ndan olu\u015fmaktad\u0131r [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5924,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"quote","meta":{"inline_featured_image":false,"footnotes":""},"categories":[87],"tags":[],"class_list":["post-6108","post","type-post","status-publish","format-quote","has-post-thumbnail","hentry","category-blog","post_format-post-format-quote"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java Spring Boot ile REST Servisi Olu\u015fturmak - Bentego<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Spring Boot ile REST Servisi Olu\u015fturmak - Bentego\" \/>\n<meta property=\"og:description\" content=\"Yaz\u0131n\u0131n i\u00e7eri\u011fi SOAP ile REST servisler aras\u0131ndaki farklar, Spring framework ile SpringBoot aras\u0131ndaki farklar, annotation \u00f6rnekleri, Hibernate ve Lombok framework kullan\u0131m\u0131ndan olu\u015fmaktad\u0131r [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/\" \/>\n<meta property=\"og:site_name\" content=\"Bentego\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-26T11:17:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bentego\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bentego\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/\"},\"author\":{\"name\":\"Bentego\",\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c\"},\"headline\":\"Java Spring Boot ile REST Servisi Olu\u015fturmak\",\"datePublished\":\"2023-06-26T11:17:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/\"},\"wordCount\":2509,\"publisher\":{\"@id\":\"https:\/\/bentego.com\/tr\/#organization\"},\"image\":{\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"tr\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/\",\"url\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/\",\"name\":\"Java Spring Boot ile REST Servisi Olu\u015fturmak - Bentego\",\"isPartOf\":{\"@id\":\"https:\/\/bentego.com\/tr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"datePublished\":\"2023-06-26T11:17:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage\",\"url\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"contentUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png\",\"width\":2400,\"height\":1600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/bentego.com\/tr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Spring Boot ile REST Servisi Olu\u015fturmak\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bentego.com\/tr\/#website\",\"url\":\"https:\/\/bentego.com\/tr\/\",\"name\":\"Bentego\",\"description\":\"Turning data into enterprise value\",\"publisher\":{\"@id\":\"https:\/\/bentego.com\/tr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bentego.com\/tr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/bentego.com\/tr\/#organization\",\"name\":\"Bentego\",\"url\":\"https:\/\/bentego.com\/tr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg\",\"contentUrl\":\"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg\",\"width\":433,\"height\":109,\"caption\":\"Bentego\"},\"image\":{\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c\",\"name\":\"Bentego\",\"sameAs\":[\"http:\/\/bentego.com\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Java Spring Boot ile REST Servisi Olu\u015fturmak - Bentego","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/","og_locale":"tr_TR","og_type":"article","og_title":"Java Spring Boot ile REST Servisi Olu\u015fturmak - Bentego","og_description":"Yaz\u0131n\u0131n i\u00e7eri\u011fi SOAP ile REST servisler aras\u0131ndaki farklar, Spring framework ile SpringBoot aras\u0131ndaki farklar, annotation \u00f6rnekleri, Hibernate ve Lombok framework kullan\u0131m\u0131ndan olu\u015fmaktad\u0131r [&hellip;]","og_url":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/","og_site_name":"Bentego","article_published_time":"2023-06-26T11:17:44+00:00","og_image":[{"width":2400,"height":1600,"url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","type":"image\/png"}],"author":"Bentego","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Bentego","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#article","isPartOf":{"@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/"},"author":{"name":"Bentego","@id":"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c"},"headline":"Java Spring Boot ile REST Servisi Olu\u015fturmak","datePublished":"2023-06-26T11:17:44+00:00","mainEntityOfPage":{"@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/"},"wordCount":2509,"publisher":{"@id":"https:\/\/bentego.com\/tr\/#organization"},"image":{"@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage"},"thumbnailUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","articleSection":["Blog"],"inLanguage":"tr"},{"@type":"WebPage","@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/","url":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/","name":"Java Spring Boot ile REST Servisi Olu\u015fturmak - Bentego","isPartOf":{"@id":"https:\/\/bentego.com\/tr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage"},"image":{"@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage"},"thumbnailUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","datePublished":"2023-06-26T11:17:44+00:00","breadcrumb":{"@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/"]}]},{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#primaryimage","url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","contentUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/06\/Frame-84__.png","width":2400,"height":1600},{"@type":"BreadcrumbList","@id":"https:\/\/bentego.com\/tr\/java-spring-boot-ile-rest-servisi-olusturmak\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/bentego.com\/tr\/"},{"@type":"ListItem","position":2,"name":"Java Spring Boot ile REST Servisi Olu\u015fturmak"}]},{"@type":"WebSite","@id":"https:\/\/bentego.com\/tr\/#website","url":"https:\/\/bentego.com\/tr\/","name":"Bentego","description":"Turning data into enterprise value","publisher":{"@id":"https:\/\/bentego.com\/tr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bentego.com\/tr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":"Organization","@id":"https:\/\/bentego.com\/tr\/#organization","name":"Bentego","url":"https:\/\/bentego.com\/tr\/","logo":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/","url":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg","contentUrl":"https:\/\/bentego.com\/wp-content\/uploads\/2025\/05\/logo-bentego.svg","width":433,"height":109,"caption":"Bentego"},"image":{"@id":"https:\/\/bentego.com\/tr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/bentego.com\/tr\/#\/schema\/person\/e38e5868721eddd5493704ec7b5be37c","name":"Bentego","sameAs":["http:\/\/bentego.com"]}]}},"_links":{"self":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/posts\/6108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/comments?post=6108"}],"version-history":[{"count":0,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/posts\/6108\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/media\/5924"}],"wp:attachment":[{"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/media?parent=6108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/categories?post=6108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bentego.com\/tr\/wp-json\/wp\/v2\/tags?post=6108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}