Restful Web Services (JAX-RS) @HeaderParam ve @Context notasyonları (annotations) ile HTTP başlık isteklerini alabiliriz.
HTTP Başlıkları (Headers) Nedir?
Bir web sayfasına giriş yapıldığında istekde (request) bulunur ve yanıt (response) alırız. HTTP başlıkları (headers) bu isteklerin ve yanıtların temel parçasıdır; istemci web tarayıcısı, istenen sayfa ve sunucu bilgileri gibi birçok konu hakkında bize bilgi verir.
Aşağıda en sık karşıma çıkan HTTP başlıklarını açıklamları ve örnekleriyle paylaştım.
Başlık Adı | Açıklama | Örnek |
---|---|---|
Accept | Yanıt için kabul edilebilir içerik türleri | Accept: text/plain |
Accept-Charset | Kabul edilebilir karakter setleri. | Accept-Charset: utf-8 |
Accept-Encoding | Kabul edilebilir kodlamaların listesi. | Accept-Encoding: gzip, deflate |
Accept-Language | Yanıt için kabul edilebilir insan dillerinin listesi. | Accept-Language: en-US |
Authorization | HTTP kimlik doğrulaması için kimlik doğrulama kimlik bilgileri. | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | İstek-yanıt zinciri boyunca tüm önbellekleme mekanizmalarının uyması gereken yönergeleri belirtmek için kullanılır. | Cache-Control: no-cache |
Cookie | Daha önce Set-Cookie ile sunucu tarafından gönderilen bir HTTP tanımlama bilgisi. | Cookie: $Version=1; Skin=new; |
Content-Length | İstek gövdesinin sekizli uzunluğu (8-bit bayt). | Content-Length: 348 |
Content-Type | İsteğin gövdesinin MIME türü (POST ve PUT istekleriyle kullanılır). | Content-Type: application/x-www-form-urlencoded |
User-Agent | Kullanıcı aracısının kullanıcı aracısı dizesi. | User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0 |
Diğer örnekleirmizde olduğu gibi hemen Maven’da oluşturduğumuz projenin web.xml ve pom.xml ayarlarını yapalım.
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 |
... <dependencies> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.8</version> </dependency> </dependencies> ... |
web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Restful Web Application</display-name> <servlet> <servlet-name>jersey-serlvet</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>org.onurarslan.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-serlvet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> |
HttpHeader_UserRestService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; @Path("/user") public class HttpHeader_UserRestService { @GET @Path("/getUserAgent") public Response getUserAgent(@HeaderParam("user-agent") String userAgent) { return Response.status(200) .entity("getUserAgent is called, userAgent : " + userAgent) .build(); } } |
Yukarıda ki örnekte /user/getUserAgent dizinine istekde bulunulduğunda @HeaderParam notasyonu ile user-agent bilgisini istiyoruz ve ekrana aşağıda ki çıktıyı veriyoruz.
URI: /rest/user/getUserAgent
1 |
getUserAgent is called, userAgent : Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36 |
HttpHeader_UserRestService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.core.Context; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; @Path("/user") public class HttpHeader_UserRestService { @GET @Path("/getUserAgent") public Response getUserAgent(@Context HttpHeaders headers) { String userAgent = headers.getRequestHeader("user-agent").get(0); return Response.status(200) .entity("getUserAgent is called, userAgent : " + userAgent) .build(); } } |
Yukarıda ki örnekte /user/getUserAgent dizinine istekte bulunulduğunda @Context notasyonu HttpHeaders tipinde HTTP başlıklarını saklar. getRequestHeader ile istenilen HTTP başlığı (user-agent istenildi), userAgent değişkenine atanıyor ve ekrana aşağıda ki sonuç döndürülüyor.
URI: /rest/user/getUserAgent
1 |
getUserAgent is called, userAgent : Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36 |