Herkese selamlar,
Bu yazıda Spring boot MVC kullanarak oluşturacağımız web servis ile JSON formatında kişi bilgisini üreteceğiz.
Örnek projenin kodlarına https://github.com/zeynepsit/restfullOrnek adresinden ulaşabilirsiniz.
Öncelikle File->New->Spring Starter Project diyerek yeni bir Spring boot projesi oluşturalım.
pom.xml dosyamız aşağıdaki gibi olucaktır.Projede ihtiyaç duyacağımz tanımları pom.xml dosyamıza ekleyeceğiz.
<build> </build> tagları ile spring boot maven pluginin devreye alınması sağlanıyor.
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.galeri</groupId> <artifactId>GaleriRest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>GaleriRest</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Dilerseniz şimdi Otomobil ve OtomobilSahip model sınıflarını oluşturalım.
id ,model ,modelYil attributelerini oluşturduktan sonra sağ tuş Source->Generate Getter and Setter den get set metotlarını oluşturalım.Aynı şekilde toString metodunu da ekleyelim.
OtomobilSahip.java
package com.galeriRestfull.model; import java.util.HashSet; import java.util.Set; public class OtomobilSahip { private Long id; private String adi; private String soyAdi; private Set<Otomobil> otomobil = new HashSet<Otomobil>(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getAdi() { return adi; } public void setAdi(String adi) { this.adi = adi; } public String getSoyAdi() { return soyAdi; } public void setSoyAdi(String soyAdi) { this.soyAdi = soyAdi; } public Set<Otomobil> getOtomobil() { return otomobil; } public void setOtomobil(Set<Otomobil> otomobil) { this.otomobil = otomobil; } @Override public String toString() { return "OtomobilSahip [id=" + id + ", adi=" + adi + ", soyAdi=" + soyAdi + "]"; } }
Otomobil.java
Otomobil sınıfına id,model,modelYil değişkenlerini ve OtomobilSahip tipinde otomobilSahip isminde attribute ekleyelim
package com.galeriRestfull.model; import java.sql.Date; public class Otomobil { private Long id; private String model; private Date modelYil; private OtomobilSahip otomobilSahip; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getModel() { return model; } public void setModel(String model) { this.model = model; } public Date getModelYil() { return modelYil; } public void setModelYil(Date modelYil) { this.modelYil = modelYil; } public OtomobilSahip getOtomobilSahip() { return otomobilSahip; } public void setOtomobilSahip(OtomobilSahip otomobilSahip) { this.otomobilSahip = otomobilSahip; } @Override public String toString() { return "Otomobil [id=" + id + ", model=" + model + ", modelYil=" + modelYil + ", otomobilSahip=" + otomobilSahip + "]"; } }
Şimdi uygulamanın Dao Arayüzlerini oluşturalım.Öncelikle com.galeriRestfull.dao adında bir paket oluşturalım.Bu paket altında OtomobilSahipRepository isminde bir interface oluşturalım.
Create,update,delete işlemlerini yapmayı sağlayacak metot tanımlarını arayüze eklememiz gerekecek.Şimdilik
2 tane metot ekleyelim.Uygulamanın devamında bu sayı artacak.
findAll adında bütün otomobil sahiplerini döndürecek bir metot tanımlayalım.Ardından id si verlien otomobil sahiplerini döndürecek findById metodunu ekleyelim
package com.galeriRestfull.dao; import java.util.List; import com.galeriRestfull.model.OtomobilSahip; public interface OtomobilSahipRepository { List<OtomobilSahip> findAll(); OtomobilSahip findById(Long id); }
Dilerseniz şimdi OtomobilSahipRepository arayüzünü implement eden OtomobilSahipRepositoryImpl sınıfı oluşturalım.
Öncelikle sınıfın üstüne @Repository anatasyonu ekleyelim.
Bu anatasyon sayesinde çalışma zamanında bir bean oluşacaktır.
Örnek nesnelerimizi oluşturacağımız OtomobilSahipRepositoryImpl contructorımızı oluşturalım.
Ardından birtane otomobilSahipMap attribute oluşturalım.Şimdi ise örnek olarak 2 tane OtomobilSahip nesnesi oluşturalım. otomobilSahipMap nesnesini kullanarak tüm metotları implement edelim.
findAll metodunun içeriğine baktığımzda otomobilSahipMap in tüm değerlerini döndürdüğünü görüyoruz.
findById ile ise otomobilSahipMap deki key ile eşleşen otomobilSahip değeri döner.
OtomobilSahipRepositoryImpl
package com.galeriRestfull.dao; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Repository; import com.galeriRestfull.model.OtomobilSahip; @Repository public class OtomobilSahipRepositoryImpl implements OtomobilSahipRepository { private Map<Long, OtomobilSahip> otomobilSahipMap = new HashMap<>(); public OtomobilSahipRepositoryImpl() { OtomobilSahip otomobilSahip1 = new OtomobilSahip(); otomobilSahip1.setId(1L); otomobilSahip1.setAdi("ZEYNEP"); otomobilSahip1.setSoyAdi("Sit"); OtomobilSahip otomobilSahip2 = new OtomobilSahip(); otomobilSahip2.setId(2L); otomobilSahip2.setAdi("ASLI"); otomobilSahip2.setSoyAdi("DEMİR"); otomobilSahipMap.put(otomobilSahip1.getId(), otomobilSahip1); otomobilSahipMap.put(otomobilSahip2.getId(), otomobilSahip2); } @Override public List<OtomobilSahip> findAll() { return new ArrayList<>(otomobilSahipMap.values()); } @Override public OtomobilSahip findById(Long id) { return otomobilSahipMap.get(id); } }
Şimdi uygulamanın Service Arayüzlerini com.galeriRestfull.service paketi altında tanımlayalım. GaleriService interface ini gerekli metotlarımızı yazalım. İlk metot java.util.List tipinde değer döndürecektir.
GaleriService
package com.galeriRestfull.service; import java.util.List; import com.galeriRestfull.model.OtomobilSahip; public interface GaleriService { List<OtomobilSahip> findOtomobilSahipler(); OtomobilSahip findOtomobilSahip(Long id); }
Ardından GaleriService arayüzünü implement eden GaleriServiceImpl sınıfını yazalım.Öncelikle @Service anatasyonu koyalım.
Sonrasında OtomobilSahipRepository tipinde otomobilSahipRepository değişkenini oluşturalım.
GaleriServiceImpl
package com.galeriRestfull.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.galeriRestfull.dao.OtomobilSahipRepository; import com.galeriRestfull.model.OtomobilSahip; @Service public class GaleriServiceImpl implements GaleriService { private OtomobilSahipRepository otomobilSahipRepository; @Autowired public void setOtomobilSahipRepository(OtomobilSahipRepository otomobilSahipRepository) { this.otomobilSahipRepository = otomobilSahipRepository; } @Override public List<OtomobilSahip> findOtomobilSahipler() { return otomobilSahipRepository.findAll(); } @Override public OtomobilSahip findOtomobilSahip(Long id) { OtomobilSahip otomobilSahip = otomobilSahipRepository.findById(id); return otomobilSahip; } }
Dilerseniz şimdi GaleriRestController sınıfını oluşturalım.Bu sunıfta spring mvc ile restfull web servisini kullanacağız.
Bilindiği gibi rest web servisi http protokü üzerinden http metoduyla gerçekleştirilir.Bu protokol reguest ile response’larla iletişim sağlar.http protokolünün url yapısı aşağıdaki gibidir.
http://localhost:8080/index?queryString#section-id
localhost=server adresi
8080=port numarası(değişebilir)
index=resourcrPath
soru işaretinden sonraki bölüm queryString olarak adlandırılır.Burada belirli filtrelemeler yapılabilir.
# işaretinden sonraki bölüm fragmentId olarak isimlendirilir.
Restful web servislerinde önemli 4 metot söz konusudur
- get:Var olan kaynağa erişim sağlar
- post:yeni kaynak oluşturur
- put:yeni kaynak oluşturur ve kaynağı günceller
- delete:mevcut kaynağı siler
Rest servisleri oluşturmak için aşağıdaki anatasyonlar kullanılır.
@Controller
@RequestMapping
@PathVariable
@RequestBody
@ResponseBody
@ResponseStatus
Şimdi aşağıdaki kodlara bakalım.
RequestMapping anatasyonu ile /index adresine gelen web isteklerinin karşılanması sağlanmış olur.
galeriService‘in findOtomobilSahipler metodunun, dönen sonucunu bir list değişkenine atayacağız ve kisiListesini return ile istemciye döndüreceğiz
İkinci metodumuz ise getOtomobilSahip metodudur.Burada /index/{id} şeklinde bir web isteği geldiğinde getOtomobilSahip metodunun devreye girmesi sağlanır.
GaleriRestController
package com.galeriRestfull.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.galeriRestfull.model.OtomobilSahip; import com.galeriRestfull.service.GaleriService; @Controller @RequestMapping("/rest") public class GaleriRestController { @Autowired private GaleriService galeriService; @RequestMapping(method=RequestMethod.GET,value="/index") @ResponseBody public ResponseEntity<List<OtomobilSahip>> getOtomobilSahipler(){ List<OtomobilSahip> kisiListesi=galeriService.findOtomobilSahipler(); return ResponseEntity.ok(kisiListesi); } @RequestMapping(method = RequestMethod.GET, value = "/index/{id}") @ResponseBody public ResponseEntity<?> getOtomobilSahip(@PathVariable("id") Long id) { OtomobilSahip kisi = galeriService.findOtomobilSahip(id); return ResponseEntity.ok(kisi); } }
Uygulamayı çalıştırdıktan sonra tarayıcımıza http://localhost:8080/rest/index sayfasına istek gönderelim.
http://localhost:8080/rest/index/2
Umarım faydalı bir yazı olmuştur,keyifli çalışmalar 🙂