
REST(Representational State Transfer)에서는 리소스(Resource)에 대한 다양한 작업을 HTTP 메서드로 표현합니다.
Spring Framework에서는 이 HTTP 메서드에 대응하는 어노테이션을 제공하여 직관적이고 간결하게 처리할 수 있도록 돕습니다.
| 어노테이션 | HTTP 메서드 | 주요 역할 | 특징 |
|---|---|---|---|
@GetMapping | GET | 리소스 조회 | 서버 상태를 변경하지 않음, 안전함, idempotent |
@PostMapping | POST | 리소스 생성 | 데이터 전송(body), 생성 작업 |
@PutMapping | PUT | 리소스 전체 수정/생성 | 전체 대체, 누락된 필드 초기화 가능성 있음 |
@PatchMapping | PATCH | 리소스 일부 수정 | 부분 수정, 효율적 |
@DeleteMapping | DELETE | 리소스 삭제 | idempotent, 삭제 작업 |
GET@GetMapping("/users/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
return ResponseEntity.ok(userService.findById(id));
}POST@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
return ResponseEntity.status(HttpStatus.CREATED).body(userService.save(user));
}PUT@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
return ResponseEntity.ok(userService.update(id, user));
}PATCH@PatchMapping("/users/{id}")
public ResponseEntity<User> partiallyUpdateUser(@PathVariable Long id, @RequestBody Map<String, Object> updates) {
return ResponseEntity.ok(userService.partialUpdate(id, updates));
}DELETE@DeleteMapping("/users/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
userService.delete(id);
return ResponseEntity.noContent().build();
}| Request | Response |
|---|---|
![]() | ![]() |
Content-Type)와 요청 본문(body)에 데이터를 포함합니다.Content-Type을 확인하고, 적절한 HttpMessageConverter를 선택합니다.Accept 헤더)을 기준으로, 응답 데이터 변환을 위해 적절한 HttpMessageConverter를 호출합니다.@ResponseStatus는 Spring Framework에서 HTTP 응답 상태 코드를 설정하기 위해 사용되는 어노테이션입니다. 주로 컨트롤러 메서드나 예외 클래스에 적용하여, 특정 조건에서 클라이언트에 반환할 HTTP 상태 코드를 명시적으로 설정합니다.
200 OK, 404 NOT FOUND, 500 INTERNAL SERVER ERROR.@ResponseStatus(value = HttpStatus.STATUS_CODE, reason = "Reason Message")
value: 반환할 HTTP 상태 코드를 설정 (필수). / reason: 상태 코드에 대한 간단한 메시지(선택).| 특징 | @RequestHeader | @ResponseEntity |
|---|---|---|
| 주요 역할 | 요청의 헤더를 읽어서 컨트롤러 메서드에서 사용 | 응답 상태 코드, 헤더, 본문을 명시적으로 설정 |
| 위치 | 컨트롤러 메서드 매개변수에 사용 | 컨트롤러 메서드의 반환값으로 사용 |
| 헤더 처리 | 요청 헤더를 읽음 | 응답 헤더를 설정함 |
| 본문(body) | 없음 | 응답 본문 데이터를 포함 |
| 사용 시기 | 클라이언트 요청 헤더를 읽어야 할 때 | 응답 데이터와 상태를 세부적으로 제어할 때 |
@RequestHeader는 클라이언트가 HTTP 요청 헤더에 포함한 값을 서버의 컨트롤러에서 읽어오기 위해 사용하는 어노테이션입니다.
@RequestHeader(value = "헤더이름", required = true/false, defaultValue = "기본값")
@RestController
public class AuthController {
@GetMapping("/secure-data")
public ResponseEntity<String> getSecureData(@RequestHeader("Authorization") String authorizationHeader) {
// "Bearer <JWT>"에서 JWT만 추출
String token = authorizationHeader.replace("Bearer ", "");
// JWT 검증 로직 (예: 서명 확인)
if (isValidToken(token)) {
return ResponseEntity.ok("You have access to secure data");
} else {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid token");
}
}
private boolean isValidToken(String token) {
// 여기서 JWT를 검증 (서명 확인, 만료 여부 등)
return true; // 실제 검증 로직으로 대체
}
}
@ResponseEntity는 HTTP 응답의 상태 코드, 헤더, 본문(body)을 명시적으로 설정하여 반환할 때 사용하는 클래스입니다.
ResponseEntity<T>
T: 응답 본문의 데이터 타입.@GetMapping("/response")
public ResponseEntity<String> getResponse() {
return new ResponseEntity<>("Hello World!", HttpStatus.OK);
}
그림출처 : 그림으로 배우는 스프링 6