Spring Boot

Controller Annotation

99duuk 2024. 9. 4. 16:44

1. @RequestParam

  • 역할: URL 쿼리 파라미터에서 값을 추출합니다.
  • 주로 사용되는 경우: GET 요청에서 URL 뒤에 붙은 쿼리 스트링(?key=value)에서 값을 받아올 때.
@GetMapping("/search")
public String search(@RequestParam("keyword") String keyword) {
    return "Search result for: " + keyword;
}

 

  • GET /search?keyword=spring 요청 시, keyword 값은 "spring"으로 바인딩.

2. @PathVariable

  • 역할: URL 경로에 포함된 변수를 메소드 파라미터로 매핑
  • 주로 사용되는 경우: RESTful API에서 리소스 식별자(ID 등)를 경로에 포함시켜 동적으로 값을 받을 때.
@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") Long id) {
    return "User ID: " + id;
}
  • GET /users/123 요청 시, id 값은 123으로 바인딩.

3. @RequestBody

  • 역할: **HTTP 요청 본문(body)**에서 JSON, XML 등의 데이터를 객체로 매핑
  • 주로 사용되는 경우: POST, PUT, PATCH 요청에서 클라이언트가 보낸 JSON 형식의 데이터를 받을 때.
@PostMapping("/users")
public ResponseEntity<Void> createUser(@RequestBody UserDTO userDTO) {
    userService.createUser(userDTO);
    return ResponseEntity.status(HttpStatus.CREATED).build();
}

 

  • 클라이언트가 요청 본문에 JSON으로 사용자의 정보를 보내면, 이를 UserDTO로 변환해 처리.

4. @ModelAttribute

  • 역할: 폼 데이터나 URL 쿼리 파라미터를 객체로 바인딩
  • 주로 사용되는 경우: GET 또는 POST 요청에서 폼 데이터나 쿼리 파라미터를 객체에 자동 바인딩할 때.
@PostMapping("/form")
public String submitForm(@ModelAttribute UserDTO userDTO) {
    return "Form submitted by: " + userDTO.getName();
}
  • 주로 HTML 폼 데이터를 객체로 받아서 처리하는 경우에 사용.

 

5. @RequestPart

  • 역할: Multipart/form-data 요청에서 파일과 JSON 또는 문자열 데이터를 함께 받아 처리
  • 주로 사용되는 경우: 파일 업로드와 함께 추가적인 데이터를 받아야 할 때.
@PostMapping("/upload")
public ResponseEntity<Void> uploadFile(
        @RequestPart("file") MultipartFile file,
        @RequestPart("description") String description) {
    fileService.save(file, description);
    return ResponseEntity.ok().build();
}
  • 파일과 함께 설명이나 다른 문자열 데이터를 동시에 받는 경우.

6. @RequestHeader

  • 역할: HTTP 요청 헤더에서 값을 추출해 메소드 파라미터로 전달
  • 주로 사용되는 경우: 인증 토큰, 사용자 에이전트 등의 HTTP 헤더 값을 가져올 때.
@GetMapping("/auth")
public String getAuthToken(@RequestHeader("Authorization") String authToken) {
    return "Token: " + authToken;
}
  • 요청 헤더에서 Authorization 값(예: 토큰)을 추출하여 사용.

 


7. @AuthenticationPrincipal

  • 역할: 현재 로그인된 사용자 정보를 가져오는 데 사용
  • 주로 사용되는 경우: 인증된 사용자의 정보를 컨트롤러에서 처리해야 할 때.
@GetMapping("/profile")
public String getUserProfile(@AuthenticationPrincipal User user) {
    return "Profile of: " + user.getUsername();
}
  • 현재 인증된 사용자 정보를 User 객체로 받아와 사용.

 

커스텀 어노테이션으로 커스텀해서 인증된 사용자 정보 주입 + 로깅 or 기타 로직 등 추가 가능


 

  • @RequestParam: URL 쿼리 파라미터 추출.
  • @PathVariable: URL 경로 변수 추출.
  • @RequestBody: 요청 본문(body)에서 JSON 등을 객체로 변환.
  • @ModelAttribute: 폼 데이터 또는 쿼리 파라미터를 객체로 바인딩.
  • @RequestPart: 파일과 JSON, 문자열 데이터를 함께 처리.
  • @RequestHeader: HTTP 요청 헤더에서 값 추출.
  • @AuthenticationPrincipal: 현재 로그인된 사용자 정보 주입.