25 Ekim 2019 Cuma

SpringMVC @RestController Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.springframework.web.bind.annotation.RestController;
Bu sınıfın kardeşi @Controller anotasyonu.

Bu anotasyon ilgili sınıftaki bütün metodların birer REST servis noktası olmasını sağlar. Açıklaması şöyle. Bu anotasyon aslında @Controller ve @ResponseBody anotasyonlarının bileşimi.

 @RestController İki Anotasyonun Bileşimidir
Bu iki anotasyon @Controller ve @ResponseBody anotasyonudur. Yani şu iki kod aynıdır.
@Controller
@ResponseBody
public class MyController { }

@RestController
public class MyRestController { }
@ResponseBody ise cevabın JSON olarak gönderimesini sağlar.
@RestController is a stereotype annotation that combines @ResponseBody and @Controller. More than that, it gives more meaning to your Controller and also may carry additional semantics in future releases of the framework.
Örnek
Açıklaması şöyle.
By default Spring will use Jackson to serialize objects returned from endpoints (in case of RestController at least) to JSON. To overcome this just return a String from your endpoint...
Eğer cevabın JSON olarak değil String olarak gitmesini istersek şöyle yaparız.
@PostMapping("/reverse")
public String reverseList(@RequestBody String string) {
  ...
}
RestController Sınıfın Metodlarında Kullanılan Anotasyonlar Nelerdir?
1. Get isteği için  @GetMapping veya onun uzun hali olan @RequestMapping ile birlikte kullanılır.
2. Post isteği için @PostMapping veya onun uzun hali olan @RequestMapping ile birlikte kullanılır.
3. Delete isteği için @DeleteMapping veya onun uzun hali olan @RequestMapping ile birlikte kullanılır.
4. Metodlara geçilen parametreler için @PathVariable kullanılır.

RestController'da Kullanılan Metod Parametreleri
Metod parametresi olan nesneler
- controller altındaki dto/request ve dto/response dizinlerinde saklayabiliriz.
- bir projede incoming ve outgoing şeklinde kullanmıştık ancak bence güzel olmamıştı

RestController İçin Path Nasıl Verilir
RestController'a bir path vermek gerekir. Eğer vermezsek controller'ın path'i boş string kabul edilir.

Dolayısıyla base path "api" ise  ve sınııfımızda get için "status" metodu varsa şöyle erişebiliriz.
http://localhost:8080/status

Örnek
RestController'a bir path vermek için şöyle yaparız
@RestController
@RequestMapping("/api")
public class HelloWorldController {

  //URI: http://localhost:8080/api/hello
  @RequestMapping(value = "/hello", method = RequestMethod.GET)
  public ResponseEntity<String> get() {
    return new ResponseEntity<>("Hello World", HttpStatus.OK);
  }

}
value Alanı
@RestController anotasyonu sınıfı Spring Bean haline getirir. Bu alana verilen değer bean'in ismi olur.

Hiç yorum yok:

Yorum Gönder