5 Aralık 2017 Salı

JAX-RS @Path Anotasyonu

@Path
Şu satırı dahil ederiz.
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
Sınıf N kere yaratılabilir. Açıklaması şöyle
By default a new resource class instance is created for each request to that resource.
Daha geniş bir açıklama şöyle.
3.1.1 Lifecycle and Environment
By default a new resource class instance is created for each request to that resource. First the constructor is called, then any requested dependencies are injected (context is one of those dependencies), then the appropriate method is invoked and finally the object is made available for garbage collection.
An implementation MAY offer other resource class lifecycles, mechanisms for specifying these are outside the scope of this specification. E.g. an implementation based on an inversion-of-control framework may support all of the lifecycle options provided by that framework.
Örnek
Sınıfın başına yazarız. Şöyle yaparız.
@Path("/parties")
public class AllPartiesResource {
  ...
}
Örnek
Metodun başına yazarız. Şöyle yaparız.
@Path("/parties")
public class AllPartiesResource {

  @Path("{party}") //points to OnePartyResource.class
  public OnePartyResource getParty(@PathParam("party")String party)
  {...}
}
Diğer
@Path anotasyonu @QueryParam ile sıkça kullanılır.
@Path anotasyonu @PathParam ile sıkça kullanılır.

ServletContext ile beraber kullanılması
Bu bence iyi bir yöntem değil ancak illa kullanmak istersek şöyle yaparız. Şu adrese gidince "http://localhost:8080/myapp/api/test" ServletContext'e erişebiliriz.
@Path("test")
public class MyResource implements ServletContextListener
{
  ...
}
Sınıfın içinde şöyle yaparız.
// All classes in the web app share a ServletContext, so attribute names
// need to start with package names to prevent collisions.
private static final String KEY = "MyKey";

@Override
public void contextInitialized(ServletContextEvent ctxt) {

  String str = "MyValue";

  ctxt.getServletContext().setAttribute(KEY, str);
}

@GET
public void test(@Context ServletContext context) {
  System.out.println(context.getAttribute(KEY));
}


Hiç yorum yok:

Yorum Gönder