Spring Boot Controller da Sık Kullanılan Anotasyonlar
Anotasyonlar genel olarak bir bileşene özellik katma veya konfigürasyon amaçlı olarak kullanılmaktadır.
Spring Boot’ta bir controller sınıfını oluşturmak ve yapılandırmak için çeşitli anotasyonlar kullanılır.
İşte en yaygın kullanılan anotasyonlar:
1- @RestController: Spring Framework’te bir sınıfı RESTful web hizmeti sağlayan bir controller olarak işaretlemek için kullanılır. Bu anotasyon, @Controller ve @ResponseBody anotasyonlarının birleşimidir. Temel olarak, RESTful web hizmetleri oluşturmak için kullanılır ve sınıf içindeki tüm metotların geri dönüş değerlerinin otomatik olarak JSON (veya XML) formatında olmasını sağlar.
@RestController
public class MyController {
//TODO...
}
2- @RequestMapping: Sınıf veya metot düzeyinde kullanılabilir ve belirli bir URL isteğini bir sınıf veya metoda yönlendirmek için kullanılır. Sınıf düzeyinde kullanıldığında, tüm metotlar için ortak bir URL kökü tanımlayabilirsiniz. Örneğin aşağıdaki kod bloğunda görüldüğü üzere eğer backend servisimize “/customer” url’i istek yollanırsa MyRestController class’ı çalışır ve url devamına göre akış devam eder.
@RestController
@RequestMapping("/customer")
public class MyRestController {
//TODO...
}
3- @GetMapping: HTTP GET isteklerini karşılamak için kullanılır.
@RestController
@RequestMapping("/customer")
public class MyRestController {
private List<Customer> customers = new ArrayList<>();
@GetMapping("/list")
public List<Customer> getCustomers() {
// İşlemler...
return customers;
}
}
4- @PostMapping: HTTP POST isteklerini karşılamak için kullanılır.
5- @RequestBody: Object tipinde veri almamızı sağlayan anotasyondur.
6- @Valid: Gelen verinin belirli validasyon kurallarına uygun olup olmadığını kontrol etmek için kullanılır.
@RestController
@RequestMapping("/customer")
public class MyRestController {
private List<Customer> customers = new ArrayList<>();
@GetMapping("/list")
public List<Customer> getCustomers() {
// İşlemler...
return customers;
}
@PostMapping("/add")
public Customer addCustomer(@Valid @RequestBody Customer customer) {
customers.add(customer);
return customer;
}
}
7- @PutMapping: HTTP PUT isteklerini karşılamak için kullanılır.
8- @PathVariable: URL aracılığıyla gönderilen verinin alınmasını sağlayan anotasyondur.
@RestController
@RequestMapping("/customer")
public class MyRestController {
private List<Customer> customers = new ArrayList<>();
@GetMapping("/list")
public List<Customer> getCustomers() {
return customers;
}
@PostMapping("/add")
public Customer addCustomer(@RequestBody Customer customer) {
customers.add(customer);
return customer;
}
@PutMapping("/update/{id}")
public Customer updateCustomer(@PathVariable int id, @RequestBody Customer customer) {
if (id < customers.size()) {
customers.set(id, customer);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
}
9- @DeleteMapping: HTTP DELETE isteklerini karşılamak için kullanılır.
@RestController
@RequestMapping("/customer")
public class MyRestController {
private List<Customer> customers = new ArrayList<>();
@GetMapping("/list")
public List<Customer> getCustomers() {
return customers;
}
@PostMapping("/add")
public Customer addCustomer(@RequestBody Customer customer) {
customers.add(customer);
return customer;
}
@PutMapping("/update/{id}")
public Customer updateCustomer(@PathVariable int id, @RequestBody Customer customer) {
if (id < customers.size()) {
customers.set(id, customer);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@DeleteMapping("/delete/{id}")
public String deleteCustomer(@PathVariable int id) {
if (id < customers.size()) {
customers.remove(id);
return "Customer with ID " + id + " has been deleted.";
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
}
10- @PatchMapping: HTTP PATCH isteklerini karşılamak için kullanılır.
11- @RequestParam: Bir metodun çağrılması sırasında gönderilen parametreleri almasını sağlar.(Aşağıdaki örnek için localhost:8852/customer/updateName?id=1&name=”sercan”
@RestController
@RequestMapping("/customer")
public class MyRestController {
private List<Customer> customers = new ArrayList<>();
@GetMapping("/list")
public List<Customer> getCustomers() {
return customers;
}
@PostMapping("/add")
public Customer addCustomer(@RequestBody Customer customer) {
customers.add(customer);
return customer;
}
@PutMapping("/update/{id}")
public Customer updateCustomer(@PathVariable int id, @RequestBody Customer customer) {
if (id < customers.size()) {
customers.set(id, customer);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@DeleteMapping("/delete/{id}")
public String deleteCustomer(@PathVariable int id) {
if (id < customers.size()) {
customers.remove(id);
return "Customer with ID " + id + " has been deleted.";
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@PatchMapping("/updateName")
public Customer updateCustomerName(@RequestParam int id, @RequestParam String name) {
if (id < customers.size()) {
Customer customer = customers.get(id);
customer.setName(name);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
}
12- @CorsOrigin: Cross-Origin Resource Sharing (CORS) yapılandırmasını sağlar. Bu, farklı kökenlerden (örneğin, farklı bir etki alanı veya port) gelen HTTP isteklerine izin vermek için kullanılır.
@RestController
@RequestMapping("/customer")
@CrossOrigin(origins = "http://example.com")
public class MyRestController {
private List<Customer> customers = new ArrayList<>();
@GetMapping("/list")
public List<Customer> getCustomers() {
return customers;
}
@PostMapping("/add")
public Customer addCustomer(@RequestBody Customer customer) {
customers.add(customer);
return customer;
}
@PutMapping("/update/{id}")
public Customer updateCustomer(@PathVariable int id, @RequestBody Customer customer) {
if (id < customers.size()) {
customers.set(id, customer);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@DeleteMapping("/delete/{id}")
public String deleteCustomer(@PathVariable int id) {
if (id < customers.size()) {
customers.remove(id);
return "Customer with ID " + id + " has been deleted.";
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@PatchMapping("/updateName")
public Customer updateCustomerName(@RequestParam int id, @RequestParam String name) {
if (id < customers.size()) {
Customer customer = customers.get(id);
customer.setName(name);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
}
13- @ExceptionHandler: Spring Framework'de bir veya daha fazla türdeki istisnaları yakalamak ve işlemek için kullanılan bir anotasyondur. Bu anotasyon, belirli bir istisna türü için özel bir hata işleme yöntemi tanımlamanızı sağlar. Bu şekilde, uygulamanızın hata durumlarını daha düzenli ve kullanıcı dostu bir şekilde yönetebilirsiniz.
@RestController
@RequestMapping("/customer")
@CrossOrigin(origins = "http://example.com") // Belirli bir kökeni izin verir
public class MyRestController {
private List<Customer> customers = new ArrayList<>();
@GetMapping("/list")
@ResponseBody
public List<Customer> getCustomers() {
return customers;
}
@PostMapping("/add")
@ResponseBody
public Customer addCustomer(@ModelAttribute Customer customer) {
customers.add(customer);
return customer;
}
@PutMapping("/update/{id}")
@ResponseBody
public Customer updateCustomer(@PathVariable int id, @RequestBody Customer customer) {
if (id < customers.size()) {
customers.set(id, customer);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@DeleteMapping("/delete/{id}")
@ResponseBody
public String deleteCustomer(@PathVariable int id) {
if (id < customers.size()) {
customers.remove(id);
return "Customer with ID " + id + " has been deleted.";
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@PatchMapping("/updateName")
@ResponseBody
public Customer updateCustomerName(@RequestParam int id, @RequestParam String name) {
if (id < customers.size()) {
Customer customer = customers.get(id);
customer.setName(name);
return customer;
} else {
throw new IllegalArgumentException("Invalid customer ID");
}
}
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
}
}
Bu anotasyonlar, Spring Boot uygulamalarını hızlı ve etkili bir şekilde oluşturmanıza, yapılandırmanıza ve yönetmenize yardımcı olur.
Tüm yazılarımı https://sercanozbek.medium.com/ adresinden inceleyebilirsiniz.
Bana ulaşmak için: LinkedIn