X
  • 2 sene ago
Categories: AnasayfaJavaProgramlamaYazılım

Spring Boot İle Rest Servis Uygulama Örneği

     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 🙂

spring-boot-hibernate-mysql-thymeleaf-ornek-uygulama1

Zeynep ŞİT :Namık Kemal Üniversitesi