본문 바로가기
백엔드

[Spring Boot] Mapping 종류

by 육빔 2024. 8. 11.
728x90
반응형

내가 알고 있는 것을 머리에 정리하고자 spring의 글을 적고자 한다.

 

일단 크게 클래스 RequestMapping과  다른 Mapping으로 분리 할 수 있을 것 같다.

 

@RequestMapping

  • 설명: 가장 기본적인 매핑 애노테이션으로, 다양한 HTTP 메서드(GET, POST, PUT, DELETE 등)와 매핑할 수 있습니다. 클래스와 메서드 레벨에서 모두 사용할 수 있으며, 메서드 레벨에서는 더 구체적인 매핑을 설정할 수 있습니다
@Controller
@RequestMapping("/api")
public class MyController {
    
    @RequestMapping(value = "/users", method = RequestMethod.GET)
    public String getUsers() {
        return "users";
    }
}

 

일단 클래스 위에 적힌 RequestMapping의 경우 전부 url 앞에 http://localhost:8080/api으로 시작하겠다는 의미이다.

그리고 클래스 안에 적힌 RequestMapping은 http://localhost:8080/api/users로 들어오는 요청은 get방식으로 처리를 한다는 의미다.

 

그리고 내가 알기로는 가독성이 떨어지고 코드가 길어지는 단점으로 아래 Mapping을 많이 쓰는 걸로 알고 있다.

 

@GetMapping

  • 설명: HTTP GET 요청을 처리하는 메서드와 매핑됩니다. 주로 데이터를 조회할 때 사용됩니다.
@GetMapping("/users")
public List<User> getAllUsers() {
    return userService.getAllUsers();
}

 

@PostMapping

  • 설명: HTTP POST 요청을 처리하는 메서드와 매핑됩니다. 주로 데이터를 생성할 때 사용됩니다.
@PostMapping("/users")
public User createUser(@RequestBody User user) {
    return userService.createUser(user);
}

 

@PutMapping

  • 설명: HTTP PUT 요청을 처리하는 메서드와 매핑됩니다. 주로 데이터를 수정할 때 사용됩니다.
@PutMapping("/users/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User user) {
    return userService.updateUser(id, user);
}

 

@DeleteMapping

  • 설명: HTTP DELETE 요청을 처리하는 메서드와 매핑됩니다. 주로 데이터를 삭제할 때 사용됩니다.
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
}

 

이렇게 자주 사용하는 4가지 Mapping이 있으며 위에 RequestMapping 보다 직관적인 걸 볼 수 있다.

 

 

 

 

그리고 Mapping 아래에 있는 함수에 들어갈 수 있는 인자들을 살펴보자.

 

 

@RequestParam

  • 설명: 요청 파라미터를 메서드의 인자로 매핑할 때 사용됩니다. 주로 쿼리 파라미터를 처리하는 데 사용됩니다.
@GetMapping("/users")
public List<User> getUsersByAge(@RequestParam int age) {
    return userService.getUsersByAge(age);
}

 

@RequestBody

  • 설명: HTTP 요청의 본문을 메서드 파라미터로 매핑할 때 사용됩니다. 주로 POST, PUT, PATCH 메서드에서 사용되며, JSON 데이터를 Java 객체로 변환합니다.
@PostMapping("/users")
public User createUser(@RequestBody User user) {
    return userService.createUser(user);
}

 

여기서 RequestBody하고 RequestParam이 햇갈릴 수 있는데 둘의 차이는

 

RequestParam은 url에 쿼리파라미터를 처리하고 RequestBody는 http body이 있는 걸 반환하는데

예시를 들면 위 같은 예시에서

 

RequestParam

localhost:8080/users?age=1

이런식으로 요청이 가면 처리가 되고

 

RequestBody

{

"name": "jyj",

"password": "1234"

}

이런식으로 Body 값을 토대로 처리하는 것이다.

 

http의 Body 값 말고 헤더 값을 처리할 수 도 있는데 

 

@RequestHeader

  • 설명: HTTP 요청의 헤더 값을 메서드 파라미터에 매핑할 때 사용됩니다.
@GetMapping("/users")
public List<User> getUsers(@RequestHeader("Authorization") String authToken) {
    return userService.getUsers(authToken);
}

 

이런식으로 head값 안에 JWT 토큰의 값을 가져올때 사용할 수 있다.

 

@CookieValue

  • 설명: HTTP 요청의 쿠키 값을 메서드 파라미터에 매핑할 때 사용됩니다.
@GetMapping("/users")
public List<User> getUsers(@CookieValue("sessionId") String sessionId) {
    return userService.getUsersBySession(sessionId);
}

 

쿠키의 정보 또한 가져올 수 있다.

 

@ModelAttribute

  • 설명: 요청 파라미터나 폼 데이터를 객체에 바인딩할 때 사용됩니다. 주로 폼 데이터 처리에서 사용됩니다.
@PostMapping("/users")
public String createUser(@ModelAttribute User user) {
    userService.createUser(user);
    return "redirect:/users";
}

 

이런 식은 보통 mustache, thymeleaf를 사용할때 자주 사용한다.

 

@RequestPart

  • 설명: 멀티파트 요청에서 특정 부분을 매핑할 때 사용됩니다. 파일 업로드 시 자주 사용됩니다.
@PostMapping("/upload")
public String uploadFile(@RequestPart("file") MultipartFile file) {
    fileService.uploadFile(file);
    return "success";
}
728x90
반응형