Merhabalar arkadaşlar. Bu yazıda Rest Servis kodlarımızı yazmaya başlıyoruz ve bazı notasyonların kullanımı ile buna başlıyoruz.

@Path Notasyonu

@Path notasyonu bizim web servis sınıflarımızın üzerinde çalışacağı url patternleridir arkadaşlar. Biz bu notasyona vereceğimiz parametre ile tarayıcı üzerinden çağırırken ya da client’lar oluşturup çağırırken web servisi kullanacağız. Örnek kullanımı şu şekilde:

@Path("/restService")
public class RestService {

}

@GET Notasyonu

İlk yazıda Restful web servis hakkında bilgi verirken onun HTTP metotları işlerini gördüğünü öğrenmiştik. İşte burada o HTTP metotlarına da giriş yapmış olacağız.

GET notasyonu HTTP metotları içinde en çok kullanılan notasyonlardan (metotlardan da diyebiliriz) biridir. GET ile işaretlenmiş metod ile biz bir şey edinmek, elde etmek için talepte bulunmuş oluyoruz. Bu notasyon ile işaretli metot çağırıldığında metot bize belirlenen veri tipi üzerinden veri sunmuş oluyor. Örnek kullanımı şu şekilde:

@Path("/restService")
public class RestService {
    @GET
    @Produces("application/json")
    public List<PojoClass> getList()
    {
       //Liste Döndürülür
    }
}

Burada ilaveten @Produces notasyonuna da değinelim. Bu notasyona verdiğiniz parametreye göre size ilgili parametre tipinde veri döndürülür. Bizim örneğimizde application/json parametresi ile GET metodu ile işaretli metot JSON tipinde çıktı üretir.

@Path notasyonu ile az önce sınıfları işaretlemeyi görmüştük ancak sadece sınıflar değil metotlar da bu notasyon ile işaretlenebilir. Yani url üzerinden metotları tetikeleyebileceğimiz pattern tanımlamış oluyoruz. Örnek kullanımı şu şekilde olur:

@Path("/restService")
public class RestService {
    @GET
    @Produces("application/json")
    @Path("/listele")
    public List<PojoClass> getList()
    {
        //Return
    }
}

Bu örnekle beraber biz bu sınıf içindeki GET ile işaretli metodu /restService/listele patterni ile çağırıp kullanırız.

Burada bir de notasyon ile işaretlenmiş metotların parametre alması meselesine bakalım.

GET notasyonu ile işaretli metodun bize bilgi getiren metot olduğundan bahsettik ama bu bilgi getirme işleminin belli şart altında olması daha iyidir. Bu durumu sağlayabilmek için de metodun parametre alması gerekir. Biz @Path notasyonuna ekleme yaparak ve metoda parametre tanımlayarak bu işlemi uygulayabiliriz. Örnek kullanımı şöyle olur:

@Path("/restService")
public class RestService {
    @GET
    @Produces("application/json")
    @Path("/listele/{isim}")
    public PojoClass getList(@PathParam("isim") String isim)
    {

    }
} Metodu işaretlediğimiz @Path notasyonuna verdiğimiz pattern peşine ***/{isim}*** ifadesi ile url’e parametre eklemesi yapılarak çağıralacağını söylüyoruz. Url’e eklenecek bu parametre de metoda ***@PathParam(“isim”)*** String isim ifadesi ile geçiriliyor. Alınan bu parametreye göre de siz mesela bir sorgu atıp çıktı alabilirsiniz.

Küçük bir örnekle bu yazıyı bitirelim.

AppConfig.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package restservice;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

/**
 *
 * @author ilkaygunel
 */
@ApplicationPath("restservice")
public class AppConfig extends Application{

}

Bu sınıf hakkında önceki yazıda konuşmuştuk, o yüzden değinmiyorum arkadaşlar.

PojoClass.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package restservice;

/**
 *
 * @author ilkaygunel
 */
public class PojoClass {
    String isim;
    String soyisim;

    public String getIsim() {
        return isim;
    }

    public void setIsim(String isim) {
        this.isim = isim;
    }

    public String getSoyisim() {
        return soyisim;
    }

    public void setSoyisim(String soyisim) {
        this.soyisim = soyisim;
    }


}

PojoClass sınıfımız bizim pojo sınıfımız. Tutulacak değerlerimiz bu sınıf üzerinden tutulacak.

RestService.java

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package restservice;

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

/**
 *
 * @author ilkaygunel
 */
@Path("/restService")
public class RestService {
    @GET
    @Produces("application/json")
    @Path("/listele/{isim}")
    public PojoClass getList(@PathParam("isim") String isim)
    {
        List<PojoClass> list = new ArrayList<>();
        PojoClass pojoClass1 = new PojoClass();
        pojoClass1.setIsim("Alican");
        pojoClass1.setSoyisim("Akkus");
        PojoClass pojoClass2 = new PojoClass();
        pojoClass2.setIsim("Mustafa");
        pojoClass2.setSoyisim("Demir");
        PojoClass pojoClass3 = new PojoClass();
        pojoClass3.setIsim("Isa");
        pojoClass3.setSoyisim("Aytimur");
        list.add(pojoClass1);
        list.add(pojoClass2);
        list.add(pojoClass3);
        PojoClass returnObject = new PojoClass();
        for(int i=0;i<list.size();i++)
        {
            if(list.get(i).getIsim().equals(isim))
            {
                returnObject.setIsim(list.get(i).getIsim());
                returnObject.setSoyisim(list.get(i).getSoyisim());
                break;
            }
        }
        return returnObject;
    }
}

RestService sınıfımız içinde konuyu anlatırken değindiğimiz tüm noktalar mevcut.

Ekran Çıktısı

http://localhost:8080/RestEasyTutorials /restservice/restService/listele/Mustafa adresi üzerinden istekte bulunuyoruz ve çıktıya baktığımız zaman bize gereken bilgiyi JSON formatında sunuyor. Biz burada metodu parametre alacak şekilde yazdığımız için herhangi bir isim vermeksizin çıktı alamayız. []