Spring @Controller ve @RestController Nedir?

Bu makalede Spring MVC’deki @Controller ve @RestController stereotiplerini ele alacağım.

@Controller, Spring içinde uzun bir geçmişe sahip bir işaretleme annotasyonudur. Öte yandan, @RestController, Spring 4.0 sürümü ile sisteme dahil oldu. Temel amacı, adından da anlaşılacağı gibi REST endpoint’leri oluşturmaktır. Aslında bu, @Controller ve @ResponseBody işaretleme anotasyonlarını aynı anda kullanmamıza olanak tanır. Bu sayede herhangi bir metodu REST denetleyicisi yapmak istediğimizde @ResponseBody eklemek zorunda kalmayız.

Bu yazımda Spring MVC’de bulunan @Controller ve @RestController streotype’ları hakkında yazmaya çalışacağım.

Controller Nedir

Controller’lar, sınıf düzeyinde @Controller işaretleme anotasyonu ile tanımlanır. Bu, aslında sınıfın bir denetleyici olduğunu belirtmek için sınıf düzeyinde ekstra bir @Component işaretleme anotasyonu eklememizi gerektirmez. @Controller kullanarak oluşturduğumuz endpoint’ler, Model sınıfı ile nesneleri Thymeleaf gibi şablon motorları üzerinden göstermemizi sağlar. Şimdi @Controller’ın kaynak koduna bir göz atalım ve bu işaretleme anotasyonunun, klasik bir arayüz olmaktan ziyade bir işaretleme anotasyonu ile kullanımını sağlamak için olduğunu da görelim.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}

RestController Nedir

RestController, @Controller ve @ResponseBody’nin bir kombinasyonundan oluşan bir stereotype’dir. Ayrıca, dolaylı olarak @Controller üzerinden @Component notasyonunu içerir. @Controller notasyonundan farklı olarak, @RestController, verinin kendisini JSON veya XML formatında doğrudan sunabilir. Örnek olarak, https://gorest.co.in/public/v1/users bağlantısına tıkladığınızda, bir @RestController yöntemine yapılan bir isteğin nasıl bir çıktı verdiğini görmek için bir örnek bulabilirsiniz.

Kaynak koduna bakacak olursak:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

Gördüğümüz gibi bu da bir annotation tanımı yapmak için oluşturulmuş ve bünyesinde de @ResponseBody barındırmakta, bu sayede return edeceği datayı serialize ederek HttpResponse olarak geriye döndürüyor.

İlgini çekebilir:  Spring JDBC ile İlişkisel Veriler

Bu yazımda, Spring Framework‘te bulunan @Controller ve bundan özelleştirilmiş olan @RestController streotype’larını gördük. Bu konu ile alakalı örnekleri önceki yazılarımızda bulabilirsiniz. Yazımı bitirmeden bir adet @RestController örneğini göstereyim.

@RestController
class EmployeeController {

    @GetMapping("/employees")
    List<Employee> all() {
        return repository.findAll();
    }
}

Bu yazıda, Spring framework içinde kullanılan iki önemli notasyon olan @Controller ve @RestController hakkında bilgi edindik. Her iki notasyon da web uygulamaları geliştirirken kullanılırken, @Controller daha çok geleneksel HTML sayfaları ve görünümleri işlemek için kullanılırken, @RestController ise JSON veya XML gibi veri formatlarıyla çalışmak için kullanılır.

@Controller, HTTP isteklerini alır, işler ve bir görünüm veya HTML sayfası üretir. Bu genellikle geleneksel web uygulamalarında tercih edilen bir yaklaşımdır.

Öte yandan, @RestController daha çok RESTful web servisler oluştururken kullanılır. Bu notasyon, istemcilere JSON veya XML gibi veri formatlarında doğrudan veri döndürmeyi kolaylaştırır.

Hangi notasyonun kullanılacağı projenin gereksinimlerine bağlıdır. Eğer bir web sayfası sunmanız gerekiyorsa @Controller kullanabilirsiniz. Ancak, veri tabanı sorgularını işleyen ve sonuçları RESTful servisler aracılığıyla döndürmeniz gerekiyorsa @RestController tercih edilebilir.

@Controller ve @RestController Spring componenti olmalarından dolayı aynı zamanda bir bean‘dir.

Unutmayın ki her iki notasyon da Spring framework içindeki güçlü ve esnek özelliklerden yararlanırken, projenizin ihtiyaçlarına uygun olanını seçmek önemlidir. Bu yazıdaki bilgiler, Spring framework’ün temel bileşenlerinden sadece birkaçını açıklar.

More Reading

Post navigation