JAX-RS (FILTER PRIORITIES)

    Bu yazımızda da bir önceki yazımızda olduğu gibi filter yazmaya devam edeceğiz.Bu yazımızda bir önceki yazımıza ilaveten bir filter yazmak yerine projemizde birden fazla filter'ı nasıl yazabileceğimize değineceğiz.Burada yardımımıza koşan ek açıklama ise @priorities.Türkçe anlamı öncelik olan bu ek açıklama yazdığımız filter'ları çalışma sırasına göre sıralıyor.Bu ek açıklama aldığı integer parametre ile filter'ları sıralıyor.Şimdi timefilter ve logfilter adında iki filter yazıp bunların hangi sırada çalışacağını belirleyelim.


package com.mycompany.filterpriorities;
import java.io.IOException;
import javax.annotation.Priority;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Priority(1)
@Provider
public class TimeFilter implements ContainerRequestFilter, ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext reqContext) throws IOException {
System.out.println("-- TimeFilter request --");
reqContext.setProperty("start-time", System.currentTimeMillis());
}
@Override
public void filter(ContainerRequestContext reqContext,
ContainerResponseContext resContext) throws IOException {
System.out.println("-- TimeFilter response --");
long startTime = (long) reqContext.getProperty("start-time");
System.out.printf("Time taken for request %s: %s milli secs%n",
reqContext.getUriInfo().getPath(),
System.currentTimeMillis() - startTime
);
}
}
view raw Gokhan hosted with ❤ by GitHub
package com.mycompany.filterpriorities;
import javax.annotation.Priority;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
@Priority(2)
@Provider
public class LogFilter implements ContainerRequestFilter, ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext reqContext) throws IOException {
System.out.println("-- req headers --");
log(reqContext.getUriInfo(), reqContext.getHeaders());
}
@Override
public void filter(ContainerRequestContext reqContext,
ContainerResponseContext resContext) throws IOException {
System.out.println("-- res headers --");
log(reqContext.getUriInfo(), resContext.getHeaders());
}
private void log(UriInfo uriInfo, MultivaluedMap<String, ?> headers) {
System.out.println("Path: " + uriInfo.getPath());
headers.entrySet().forEach(h -> System.out.println(h.getKey() + ": " + h.getValue()));
}
}
view raw Gokhan hosted with ❤ by GitHub
Gördüğünüz gibi iki filter yazıp bunlara sıra verdik.Parametre değeri düşük olan daha önce çalışacak.Şimdi de resource ve applicationconfig sınıfımızı yazıp örneğimizi çalıştıralım.

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@Path("/")
public class MyResource {
@GET
@Path("{path:.*}")
public String getResponse(@PathParam("path") String path) {
System.out.printf("creating response for '%s'%n", path);
return "dummy-response for " + path;
}
}
view raw Gokhan hosted with ❤ by GitHub
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("")
public class ApplicationConfig extends Application {
}
view raw Gokhan hosted with ❤ by GitHub

Ve programımızı derleyip payara sunucumuzundaki çıktılarımıza göz atalım.




Gördüğünüz gibi önce time filter'ımız daha sonra log filter'ımız çalışıyor.Umarım faydalı olmuştur.Bir sonraki yazımızda görüşmek üzere.

Hiç yorum yok:

Yorum Gönder

Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...