8 Şubat 2018 Perşembe

JAX-RS Application Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
Eğer kullandığımız container Servlet 3.0'ı desteklemiyorsa yani eski Tomcat ise şu satırı dahil ederiz.
<dependency>
  <groupId>org.glassfish.jersey.bundles</groupId>
  <artifactId>jaxrs-ri</artifactId>
  <version>2.13</version>
</dependency>
İskelet
Şöyle yaparız. Rest sınıflarımız ApplicationConfig ile aynı pakette bulunursa daha iyi olur.
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("rest")
public class ApplicationConfig extends Application{  
}
Bu sınıfı kalıtan sınıflardan birisi Jersey ResourceConfig sınıfı.

Hiçbir metodu override etmemenin açıklaması şöyle. Yani @Path ile işaretli tüm sınıfları yükler.
You can fully leverage the servlet class scanning abilities if you have both getClasses() and getSingletons() return an empty set.
...
When scanning, the application server will look within WEB-INF/classes and any JAR file within the WEB-INF/lib directory. It will add any class annotated with @Path or @Provider to the list of things that need to be deployed and registered with the JAX-RS runtime. You can also deploy as many Application classes as you want in one WAR. The scanner will also ignore any Application classes not annotated with @ApplicationPath.

getClasses metodu
Bu kod yerine niçin otomatik olarak sınıflar bulunmuyor bilmiyorum.

Örnek
Şöyle yaparız.
@ApplicationPath("/itemapi")
public class MyApplication extends Application {

  @Override
  public Set<Class<?>> getClasses() {
    Set<Class<?>> classes = new HashSet<Class<?>>();

    classes.add(tr.com.foo.bar.MyResource.class);
    ...
    return classes;
  }
}
Örnek
Şöyle yaparız.
@Override
public Set<Class<?>> getClasses() {
  Set<Class<?>> resources = new java.util.HashSet<>();
  resources.add(my.foo.bar.MyService.class);
  return resources;
}

getSingletons metodu
Örnek ver

Hiç yorum yok:

Yorum Gönder