Spring Web'deki ResponseEntity konusunu detaylı bir şekilde inceleyebiliriz. ResponseEntity, HTTP yanıtlarını daha esnek ve özelleştirilebilir bir şekilde oluşturmanıza olanak tanıyan Spring Framework'ün bir sınıfıdır. İşte bu konunun ana noktaları:
- ResponseEntity Nedir?
- Temel Kullanım
- Statik Factory Metodları
- Headers ve Body Ekleme
- HTTP Durum Kodları
- Örnekler ve Kullanım Senaryoları
- ResponseEntity Nedir?
ResponseEntity, Spring Framework'te org.springframework.http paketi altında bulunan bir sınıftır. Bu sınıf, HTTP yanıtlarını tam olarak kontrol etmenizi sağlar. Yanıtın gövdesini, başlıklarını ve durum kodunu özelleştirmenize olanak tanır.
- Temel Kullanım
ResponseEntity'nin temel kullanımı şu şekildedir:
@GetMapping("/example") public ResponseEntity<String> example() { return new ResponseEntity<>("Hello, World!", HttpStatus.OK); }
Bu örnekte, "Hello, World!" mesajını içeren ve HTTP 200 OK durum koduyla bir yanıt döndürüyoruz.
- Statik Factory Metodları
ResponseEntity sınıfı, yanıt oluşturmayı kolaylaştıran çeşitli statik factory metodları sunar:
// Body olmadan ResponseEntity.ok() ResponseEntity.notFound() ResponseEntity.badRequest() // Body ile ResponseEntity.ok("Success") ResponseEntity.status(HttpStatus.CREATED).body(newResource)
- Headers ve Body Ekleme
Yanıta özel başlıklar ekleyebilir ve gövdeyi özelleştirebilirsiniz:
HttpHeaders headers = new HttpHeaders(); headers.add("Custom-Header", "value"); return ResponseEntity .ok() .headers(headers) .body("Response with custom header");
- HTTP Durum Kodları
ResponseEntity, tüm standart HTTP durum kodlarını destekler. Örneğin:
ResponseEntity.ok() // 200 OK ResponseEntity.created(URI.create("/new-resource")) // 201 Created ResponseEntity.noContent().build() // 204 No Content ResponseEntity.notFound().build() // 404 Not Found ResponseEntity.badRequest().body("Invalid input") // 400 Bad Request
- Örnekler ve Kullanım Senaryoları
a) REST API'de CRUD işlemleri:
@PostMapping("/users") public ResponseEntity<User> createUser(@RequestBody User user) { User savedUser = userService.save(user); return ResponseEntity .created(URI.create("/users/" + savedUser.getId())) .body(savedUser); } @GetMapping("/users/{id}") public ResponseEntity<User> getUser(@PathVariable Long id) { return userService.findById(id) .map(ResponseEntity::ok) .orElse(ResponseEntity.notFound().build()); }
b) Koşullu yanıtlar:
@GetMapping("/resource") public ResponseEntity<Resource> getResource(@RequestParam String etag) { Resource resource = // ... resource'u al return ResponseEntity .ok() .eTag(resource.getETag()) .lastModified(resource.getLastModified()) .body(resource); }
c) Dosya indirme:
@GetMapping("/download") public ResponseEntity<Resource> downloadFile() { Resource file = // ... dosyayı yükle return ResponseEntity.ok() .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"") .body(file); }
ResponseEntity, Spring Web uygulamalarında HTTP yanıtlarını özelleştirmek ve kontrol etmek için güçlü bir araçtır. İstemciye gönderilen yanıtın her yönünü (durum kodu, başlıklar, gövde) hassas bir şekilde yönetmenize olanak tanır.