[Spring Boot] Mapping 종류
내가 알고 있는 것을 머리에 정리하고자 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";
}