Merhabalar arkadaşlar. Bu yazıda bir başka parametre elde etme yöntemi olan QueryParam’ı inceleyeceğiz.

Şimdiye kadarki yazılarda hep biz bir path tanımlaması yaparak parametre aldık. Fakat QueryParam ile web servisin yoluna herhangi bir ekleme, tanımlama yapmadan parametre almamız mümkün hale geliyor.

RestEasy API Servlet’in üstüne kurulu olduğu ve onun en üst katmanında yer aldığı için URI query parametrelerini URL form encoded parametrelerden ayırmaz. PathParam’da olduğu gibi QueryParam’da da verilerimiz int,String, bir Sınıf vs. tipinde olabilir.

Şimdi örnek kullanıma bakalım.

ApplicationConfig.java

package com.mycompany.resteasytutorials;

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


@ApplicationPath("queryParamExample")
public class ApplicationConfig extends Application{
    
}

Web servisimiz için kök yolun queryParamExample olduğunu söyledik.

QueryParamExample.java

package com.mycompany.resteasytutorials;

import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

@Path("/getBooks")
public class QueryParamExample {
    @GET
    public String getBook(@QueryParam("bookName") String bookName) {
        String returnedBook="";
        List<String> books = new ArrayList<>();
        
        books.add("1984");
        books.add("Hayvan Çiftliği");
        books.add("Cesur Yeni Dünya");
        
        for(String s : books) {
            if (s.equals(bookName)) {
                returnedBook = s;
                break;
            }
        }
        return returnedBook;
    }           
}

QueryParamExample sınıfımız içinde @GET notasyonu ile işaretlediğimiz ve sayfaya istekte bulunulduğunda çalışacak metodu görüyoruz. Bu metot QueryParam notasyonu ile tanımlanmış olan adres çubuğundan bookName ismi ile gönderilecek String tipindeki bookName* parametresini bekliyor. Metot içinde bir liste oluşturup eklemeler yapıyoruz ve QueryParam’dan gelen kitap ismini aratıp döndürüyoruz.

Ekran Çıktısı

QueryParam ile tanımlanmış bir parametreyi gönderebilmek için web servis yolunun bittiği yerde ? işareti kullanıp peşine parametrenin adını ve değerini yazıyoruz. Bizim parametremizin adın bookName idi ve gönderdiğimiz değer de Hayvan Çiftliği. Bu nedenle ?bookName=Hayvan Çiftliği diyerek parametremizi gönderiyoruz. Resimdeki %20 ifadesi URL kodlamasından geliyor, ona takılmayın. Hayvan Çiftliği şeklinde girdiğinizde parametre doğru bir şekilde iletiliyor.

Ekran çıktısında gördüğümüz gibi bir Türkçe karakter sorunu ile kaşı karşıyayız. Nasıl çözeceğiz bunu? Tek satırlık bir kod eklemesi bu sorunun kolayca üstesinden geleceğiz.

QueryParamExample sınıfımız içinde @GET notasyonunun hemen altına şu satırı ekleyelim.

@Produces(MediaType.TEXT_HTML+";charset=UTF-8")

Kod içinde şimdiye kadarki yazılardan farklı olarak @Produces notasyonunu kullanmamıştık. Fakat biz kullansak kullanmasak da arka planda bu notasyon çalışır ve varsayılan olarak TEXT_HTML tipinde veri üretir. Biz bu notasyonu kullanıp MediaType.APPLICATION_JSON ya da “application/json” ataması yaptığımızda sadece verilecek çıktının tipini değiştirmiş oluyoruz aslında.

Burada varsayılan çıktı olan TEXT_HTML’in karakter kodlmasını UTF-8’e dönüştürmek ve Türkçe karakterle sorun vermemesini sağlamak için MediaType.TEXT_HTML ifadesinin yanına “;charset=UTF-8” String’ini ekledik. Bunu web servis apisi bu web servisin karakter kodlamasını değiştiriyor ve UTF-8 yapıyor.

Şimdi ekran çıktısına bir kez daha bakalım.

Türkçe karakter sorunu başarı ile çözüldü :)

Bu yazıda da bu kadar arkadaşlar. QueryParam’ı ve Türkçe karakter sorununun çözümünü görmüş olduk. Gelecek yazıda görüşene kadar sağlıcakla kalın.