23 Ocak 2017 Pazartesi

Spring RestTemplate Kullanımı


Bir önceki yazımda yazdığımız web service’i başka bir uygulama da kullanmak istediğimizi bir anlık düşünelim. Zaten web service’lerin görevi de bu şekil bir ara katman görevi görmektir. İşte tam bu esnada devreye RestTemplate girer.

Ben yazdığım service’i stand alone bir Java uygulamasında kullanacağım. Siz de kendi yazdığınız web service’i bir Android uygulamasında ya da başka bir web uygulamasında kullanabilirsiniz. Tek yapmanız gereken şey yazdığınız web service’in bir server üzerinde deploy edilmiş olmasıdır.

Lafı fazla uzatmadan kodlamaya başlayalım.

 RestTemplateKullanimiMain.java


public class RestTemplateKullanimiMain {

     private static final String LIST_URL = "http://localhost:9090
/SpringDispatcherServlet/kitaplarRest/kitaplar";
     private static final String FIND_BY_ID_URL= "http://localhost:9090/SpringDispatcherServlet/kitaplarRest/findKitapById";
     private static final String CREATE_URL = "http://localhost:9090/SpringDispatcherServlet/kitaplarRest/createKitap";
     private static final String UPDATE_URL = "http://localhost:9090/SpringDispatcherServlet/kitaplarRest/updateKitap";
     private static final String DELETE_URL = "http://localhost:9090/SpringDispatcherServlet/kitaplarRest/deleteKitap";

   public static void main(String[] args) {
     RestTemplate restTemplate = new RestTemplate();
     Kitap kitap = new Kitap();
     KitapResult kitapResult = new KitapResult();
     ArrayList<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
                acceptableMediaTypes.add(MediaType.APPLICATION_JSON);

     HttpHeaders headers = new HttpHeaders();
     headers.setAccept(acceptableMediaTypes);

     HttpEntity<Kitap> entity = new HttpEntity<Kitap>(kitap, headers);
     HttpEntity<KitapResult> resultEntity = new HttpEntity<KitapResult>   (kitapResult, headers);
     HttpStatus statusCode = null;
     ResponseEntity<Kitap> result = null;
     ResponseEntity<KitapResult> kayitResult = null;

   
    // Kitap Listesi
    kitapListele(restTemplate);
  
    // Kitap Arama
    kitap.setKitapId(126);
 
    try {
       result = kitapAra(restTemplate, entity, kitap);
       statusCode = result.getStatusCode();
    } catch (HttpClientErrorException e) {
       statusCode = e.getStatusCode();
    }
    if(statusCode == HttpStatus.NOT_FOUND){
      System.err.println("Kayıt bulunamadı.");
    }else if(statusCode == HttpStatus.OK){
      System.out.println(result.getBody().getKitapAd() + " "   +result.getBody().getYazarAd());
    }

   //Kitap Kayıt
   kitapResult.setKitapAd("Şah Baba");
   kitapResult.setYazarAd("Murat BARDAKÇI");
   kitapResult.setKitaptur("Tarih");
   kitapResult.setKitapDurum("Rafta");
   try {
       kayitResult = kitapKayit(restTemplate,resultEntity,kitap);
       statusCode = kayitResult.getStatusCode();
   } catch (HttpClientErrorException e) {
       statusCode = e.getStatusCode();
   }

   if(statusCode == HttpStatus.CREATED){
      System.out.println(kitapResult.getKitapAd()+" adlı kitap kaydedildi.");
   }
 
   //Kitap Sil
   kitap.setKitapId(275);
   try {
      result = deleteKitap(restTemplate, entity, kitap);
      statusCode = result.getStatusCode();
   } catch (HttpClientErrorException e) {
      statusCode = e.getStatusCode();
   }
   if(statusCode == HttpStatus.OK){
      System.out.println(result.getBody().getKitapAd()+" adlı kitap silindi!");
   }else if(statusCode == HttpStatus.NOT_FOUND){
      System.out.println("Kayıt bulunamadı!");
   }

}


private static void kitapListele(RestTemplate restTemplate){
    List<LinkedHashMap> emps = restTemplate.getForObject(LIST_URL, List.class);
    for(LinkedHashMap map : emps){
       System.out.println("Kitap ID="+map.get("kitapId")+" , Kitap  Ad="+map.get("kitapAd")+" "
+ ", Yazar Ad="+map.get("yazarAd")+" , Kitap Tür = "+map.get("kitaptur")+" , "
+ "Kitap Durum = "+map.get("kitapDurum"));
    }
}

private static ResponseEntity<Kitap> kitapAra(RestTemplate  restTemplate,HttpEntity<Kitap> entity,Kitap kitap){
    return restTemplate.exchange(FIND_BY_ID_URL,
           HttpMethod.POST, entity, Kitap.class);
}

private static ResponseEntity<KitapResult> kitapKayit(RestTemplate restTemplate,HttpEntity<KitapResult> entity,Kitap kitap){
    return restTemplate.exchange(CREATE_URL,
           HttpMethod.POST, entity, KitapResult.class);
}

private static ResponseEntity<Kitap> deleteKitap(RestTemplate restTemplate,HttpEntity<Kitap> entity,Kitap kitap){
    return restTemplate.exchange(DELETE_URL,
           HttpMethod.POST, entity, Kitap.class);
}

private static ResponseEntity<Kitap> updateKitap(RestTemplate restTemplate,HttpEntity<Kitap> entity,Kitap kitap) {
    return restTemplate.exchange(UPDATE_URL,
          HttpMethod.POST, entity, Kitap.class);
   }

}

 Bir sonra ki yazımda görüşmek üzere. İyi çalışmalar...

19 Ocak 2017 Perşembe

Spring Rest API Kullanımı



Bu yazımda sizlere Spring Rest API kullanımından bahsedeceğim. Bir sonra ki yazımda da yazdığımız bu web servisleri başka bir uygulamadan nasıl çağıracağımız hakkında (RestTemplate) bilgi vereceğim.

Restful web servisler sunucu ile haberleşmek için daha çok JSON kullanırlar.Client-Server arasında ki iletişim HTTP üzerinden sağlanır.

Bu kısa bilgiden sonra artık Spring REST kodlamaya başlayabiliriz. Ben data olarak kendi veritabanımda ki kutuphane tablosunu kullanacağım. DAO ‘ dan çekeceğiniz verinin türünü sizlere bırakıyorum.



KitaplarRestController.java


package com.mesutemre.restcontroller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.mesutemre.dao.KitaplarDAO;
import com.mesutemre.model.Kitap;
import com.mesutemre.model.KitapResult;

@RestController
@RequestMapping(value = "/kitaplarRest")
public class KitaplarRestController {
 
@Autowired
private KitaplarDAO service;

@RequestMapping(value = "/kitaplar" , method = RequestMethod.GET , produces = "application/json")
public ResponseEntity<List<Kitap>> getKitapListe(){
  List<Kitap> kitapListe = service.getKitapListe();
  if(kitapListe == null){
    return new ResponseEntity<List<Kitap>>(HttpStatus.NO_CONTENT);
  }
  return new ResponseEntity<List<Kitap>>(kitapListe,HttpStatus.OK);
}

@RequestMapping(value = "/findKitapById" , method = RequestMethod.POST , produces  = MediaType.APPLICATION_JSON_VALUE)
  public @ResponseBody ResponseEntity<Kitap> findKitapById(@RequestBody Kitap k){
   Kitap kitap = service.findKitapById(k.getKitapId());
   if(kitap == null){
     return new ResponseEntity<Kitap>(HttpStatus.NOT_FOUND);
   }
   return new ResponseEntity<Kitap>(kitap,HttpStatus.OK);
}

@RequestMapping(value = "/createKitap" , method = RequestMethod.POST
                produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody ResponseEntity<KitapResult> createKitap(@RequestBody Kitap k){
   Kitap kitap = service.createKitap(k);
   if(kitap == null){
     return new ResponseEntity<KitapResult>(HttpStatus.FORBIDDEN);
   }
   KitapResult kitapResult = new KitapResult();
   kitapResult.setKitapAd(kitap.getKitapAd());
   kitapResult.setYazarAd(kitap.getYazarAd());
   kitapResult.setKitapDurum(kitap.getKitapDurum());
   kitapResult.setKitaptur(kitap.getKitaptur());
   return new ResponseEntity<KitapResult>(kitapResult,HttpStatus.CREATED);
}

@RequestMapping(value = "/deleteKitap" , method = RequestMethod.POST
                produces = "application/json")
public @ResponseBody ResponseEntity<Kitap> deleteKitap(@RequestBody Kitap kitap){
    Kitap k = service.deleteKitap(kitap.getKitapId());
    if(k == null){
       return new ResponseEntity<Kitap>(HttpStatus.NOT_FOUND);
    }
    return new ResponseEntity<Kitap>(k,HttpStatus.OK);
}

@RequestMapping(value = "/updateKitap" , method = RequestMethod.POST
                produces = "application/json")
public @ResponseBody ResponseEntity<Kitap> updateKitap(@RequestBody Kitap kitap){
    Kitap k = service.updateKitap(kitap);
    if(k == null){
       return new ResponseEntity<Kitap>(HttpStatus.NOT_FOUND);
    }
    return new ResponseEntity<Kitap>(k,HttpStatus.OK);
   }
}



 
Yazdığımız bu metodlar POSTMAN ile aşağıda ki gibi çağrılarak sonuçlar döner.