@RequestMapping 핸들러 메서드는 특정 URL 요청을 처리하기 위해 쓰이는 메서드야. 이 애노테이션을 통해 URL을 메서드랑 연결해서 요청을 처리하고 그 결과를 반환해주는 거지.
1. @RequestMapping
• 설명: 가장 기본적인 매핑 애노테이션으로, 특정 경로로 들어오는 모든 HTTP 메서드(GET, POST, PUT, DELETE 등)를 처리할 수 있어.
• 주요 기능:
• 경로(Path): 요청 경로와 일치하는 메서드를 처리하게 해.
• HTTP 메서드 제약: method 속성을 사용하면 특정 HTTP 메서드만 처리하도록 설정할 수 있어.
• 예시:
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String home() {
return "home";
}
위 코드는 “/home” 경로로 들어온 GET 요청을 처리하며, “home” 뷰를 반환해.
2. Method Arguments (메서드 인자)
• 설명: Spring MVC에서는 컨트롤러 메서드가 요청을 처리할 때, 다양한 방식으로 메서드 인자를 사용할 수 있어. 인자들은 요청 파라미터, 헤더, 세션 속성 등에서 자동으로 주입될 수 있고, 이를 통해 요청 데이터를 쉽게 접근할 수 있어.
• 예시:
@GetMapping("/greet")
public String greet(@RequestParam("name") String name, Model model) {
model.addAttribute("message", "Hello, " + name);
return "greeting";
}
3. Return Values (반환 값)
• 설명: 컨트롤러 메서드는 다양한 반환 타입을 가질 수 있어. 문자열(String), 뷰 이름, 모델 객체, HTTP 응답 코드 등으로 반환할 수 있어. 예를 들어, String은 뷰 이름을 반환하고, ModelAndView는 모델과 뷰를 함께 반환해.
• 예시:
@GetMapping("/welcome")
public String welcome() {
return "welcomeView"; // welcomeView.jsp로 포워딩
}
4. Type Conversion (타입 변환)
• 설명: Spring은 요청 데이터(문자열)를 컨트롤러 메서드의 인자 타입으로 자동 변환할 수 있는 강력한 타입 변환 메커니즘을 제공해. 예를 들어, String을 int, Date, 커스텀 객체로 변환하는 기능을 제공해.
• 예시:
@GetMapping("/showAge")
public String showAge(@RequestParam("age") int age) {
return "Your age is " + age;
}
5. Matrix Variables (매트릭스 변수)
• 설명: URL 경로의 세미콜론(;) 뒤에 오는 매트릭스 변수를 처리하는 데 사용돼. RESTful API 설계에서 경로에 여러 파라미터를 포함할 때 유용해.
• 예시:
@GetMapping("/pets/{petId}")
public String findPet(@PathVariable String petId, @MatrixVariable int age) {
// URL 예시: /pets/42;age=5
return "Pet ID: " + petId + ", Age: " + age;
}
6. @GetMapping
• 설명: GET 요청을 처리하는 전용 애노테이션이야. 주로 데이터를 조회하거나 HTML 페이지를 렌더링할 때 사용돼.
• 주요 특징:
• @RequestMapping(method = RequestMethod.GET)의 축약형.
• 데이터를 조회하거나 서버 리소스를 가져올 때 주로 사용돼.
• 예시:
@GetMapping("/users")
public String listUsers(Model model) {
// 사용자 목록을 조회해서 모델에 추가
return "userList"; // 뷰 이름을 반환
}
이 코드는 “/users” 경로로 들어온 GET 요청을 처리하고, 사용자 목록을 모델에 추가해서 “userList” 뷰를 반환해.
7. @PostMapping
• 설명: POST 요청을 처리하는 애노테이션으로, 주로 데이터를 서버로 보내거나 리소스를 생성할 때 사용돼.
• 주요 특징:
• @RequestMapping(method = RequestMethod.POST)의 축약형.
• 주로 폼 데이터 제출, 새로운 리소스 생성에 사용돼.
• 예시:
@PostMapping("/users")
public String createUser(@ModelAttribute User user) {
// 사용자 데이터를 받아서 처리
return "redirect:/users"; // 새로고침 후 사용자 목록으로 리다이렉트
}
8. @PutMapping
• 설명: PUT 요청을 처리하는 애노테이션으로, 주로 기존 리소스를 업데이트할 때 사용돼.
• 주요 특징:
• @RequestMapping(method = RequestMethod.PUT)의 축약형.
• 데이터를 전송해 기존 데이터를 완전히 대체하는 작업을 수행해.
• 예시:
@PutMapping("/users/{id}")
public String updateUser(@PathVariable Long id, @ModelAttribute User user) {
// 사용자 정보 업데이트
return "redirect:/users";
}
9. @DeleteMapping
• 설명: DELETE 요청을 처리하는 애노테이션으로, 주로 리소스를 삭제할 때 사용돼.
• 주요 특징:
• @RequestMapping(method = RequestMethod.DELETE)의 축약형.
• 서버에서 리소스를 제거하는 작업을 처리해.
• 예시:
@DeleteMapping("/users/{id}")
public String deleteUser(@PathVariable Long id) {
// 사용자 삭제 로직
return "redirect:/users";
}
10. @PatchMapping
• 설명: PATCH 요청을 처리하는 애노테이션으로, 주로 리소스의 일부만 수정할 때 사용돼.
• 주요 특징:
• 리소스의 일부분만 변경하는 작업을 수행해.
• 예시:
@PatchMapping("/users/{id}")
public String patchUser(@PathVariable Long id, @ModelAttribute User user) {
// 사용자 정보의 일부를 업데이트
return "redirect:/users";
}
11. @RequestParam
• 설명: HTTP 요청의 쿼리 파라미터나 폼 데이터를 매핑할 때 사용돼.
• 주요 특징:
• 요청에서 전달된 파라미터를 메서드 인자로 받아와.
• required 속성으로 필수 여부를 설정할 수 있어.
• defaultValue 속성으로 기본값을 지정할 수 있어.
• 예시:
@GetMapping("/search")
public String searchUsers(@RequestParam("query") String query) {
// 쿼리 파라미터로 전달된 값을 사용해 검색
return "searchResults";
}
12. @PathVariable
• 설명: URL 경로에서 값을 추출해 메서드 인자로 매핑할 때 사용돼.
• 주요 특징:
• RESTful 스타일의 URL에서 변수를 추출해.
• 경로 변수는 URL 패턴에 중괄호 {}로 표시돼.
• 예시:
@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
// 경로에서 ID 값을 받아와서 사용자 정보를 조회
return "userDetail";
}
13. @RequestHeader
• 설명: HTTP 요청 헤더 값을 메서드 인자로 받을 때 사용돼.
• 주요 특징:
• 특정 요청 헤더 값을 메서드 파라미터로 전달받을 수 있어.
• required 속성으로 헤더가 필수인지 선택할 수 있어.
• 예시:
@GetMapping("/headers")
public String getHeaderInfo(@RequestHeader("User-Agent") String userAgent) {
// 요청 헤더에서 User-Agent 값을 받아옴
return "headerInfo";
}
14. @CookieValue
• 설명: HTTP 요청 쿠키 값을 메서드 인자로 받을 때 사용돼.
• 주요 특징:
• 특정 쿠키 값을 메서드 파라미터로 전달받을 수 있어.
• required 속성으로 필수 여부를 설정할 수 있어.
• 예시:
@GetMapping("/cookies")
public String getCookies(@CookieValue("SESSIONID") String sessionId) {
// 요청 쿠키에서 SESSIONID 값을 받아옴
return "cookieInfo";
}
15. @ModelAttribute
• 설명: 모델에 데이터를 바인딩하거나, 폼 데이터를 받아올 때 사용돼.
• 주요 특징:
• 요청 파라미터를 객체에 바인딩해 사용할 수 있어.
• HTML 폼의 입력 값을 Java 객체로 자동으로 바인딩할 때 사용돼.
• 예시:
@PostMapping("/users")
public String createUser(@ModelAttribute User user) {
// 폼 데이터를 User 객체로 자동 바인딩
return "redirect:/users";
}
16. @SessionAttributes
• 설명: @SessionAttributes는 **세션(Session)**에 특정 모델 데이터를 저장하고, 다른 요청에서도 그 데이터를 유지하고 싶을 때 사용해. 주로 폼 데이터를 여러 요청 간에 유지할 때 유용해.
• 주요 특징:
• 컨트롤러에서 처리한 모델 속성들을 세션에 저장하고, 다른 요청에서도 동일한 데이터를 사용할 수 있게 해줘.
• 예를 들어, 다중 페이지 폼에서 첫 번째 페이지에 입력한 데이터를 유지한 채로 두 번째 페이지에서 사용하고 싶을 때 유용해.
• 예시:
@Controller
@SessionAttributes("user")
public class UserController {
@GetMapping("/form")
public String showForm(Model model) {
model.addAttribute("user", new User()); // 이 모델 속성은 세션에 저장됨
return "userForm";
}
@PostMapping("/submit")
public String submitForm(@ModelAttribute User user) {
// 세션에 저장된 user를 계속 사용할 수 있음
return "userSuccess";
}
}
17. @SessionAttribute
• 설명: @SessionAttribute는 세션에 저장된 값을 직접 가져오는 데 사용돼. 세션에서 특정 속성만 필요할 때 유용하며, 그 값을 메서드 인자로 바로 받을 수 있어.
• 주요 특징:
• 세션에 저장된 특정 속성 값을 쉽게 가져와서 사용할 수 있어.
• 주로 세션에서 중요한 정보(예: 사용자 정보)를 처리할 때 사용돼.
• 예시:
@Controller
public class ProfileController {
@GetMapping("/profile")
public String showProfile(@SessionAttribute("user") User user, Model model) {
model.addAttribute("user", user); // 세션에서 가져온 사용자 정보를 모델에 추가
return "profile";
}
}
여기서 @SessionAttribute("user")는 세션에 저장된 user라는 이름의 속성을 가져와서 user 객체로 사용할 수 있게 해줘.
18. @RequestAttribute
• 설명: @RequestAttribute는 요청에 담긴 특정 속성을 바로 접근할 때 사용돼. 주로 필터나 인터셉터에서 설정된 속성에 접근할 때 유용해.
• 주요 특징:
• HTTP 요청 속성(request attribute)에 저장된 값을 바로 접근해서 사용할 수 있어.
• 필터나 인터셉터에서 설정한 속성을 컨트롤러 메서드에서 사용하고 싶을 때 유용해.
• 예시:
@GetMapping("/process")
public String handleProcess(@RequestAttribute("processingTime") long processingTime, Model model) {
model.addAttribute("processingTime", processingTime); // 요청에 저장된 속성 사용
return "processResult";
}
@RequestAttribute("processingTime")는 요청 객체에 저장된 processingTime 속성에 접근해 사용할 수 있게 해줘.
19. Redirect Attributes
• 설명: 리다이렉트할 때, 데이터(주로 모델 속성)를 전달하기 위한 방법. 일반적으로 리다이렉트 후에도 모델 데이터를 유지하고자 할 때 사용돼.
• 예시:
@PostMapping("/save")
public String saveData(RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("message", "Data saved successfully!");
return "redirect:/result";
}
20. Flash Attributes
• 설명: RedirectAttributes의 일환으로, 한 요청에서 다른 요청으로 데이터를 임시로 저장할 때 사용돼. 주로 리다이렉트 이후 데이터를 전달하는 데 유용해.
• 예시:
@PostMapping("/submit")
public String submitForm(RedirectAttributes redirectAttributes) {
redirectAttributes.addFlashAttribute("successMessage", "Form submitted successfully!");
return "redirect:/confirmation";
}
21. Multipart
• 설명: 파일 업로드 기능을 제공하는 애노테이션. 사용자로부터 파일을 받아서 처리할 때 사용돼.
• 예시:
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
// 파일 처리 로직
return "File uploaded successfully!";
}
22. @RequestBody
• 설명: 요청 본문을 객체로 변환해 메서드 인자로 매핑할 때 사용돼. 주로 JSON 데이터를 처리할 때 유용해.
• 주요 특징:
• JSON, XML과 같은 요청 본문을 자동으로 객체로 변환해줘.
• HTTP 요청의 본문을 파싱해 객체로 만들기 때문에 주로 POST, PUT 메서드에서 사용해.
• 예시:
@PostMapping("/users")
public String createUser(@RequestBody User user) {
// 요청 본문을 User 객체로 변환해 처리
return "redirect:/users";
}
23. @ResponseBody
• 설명: 반환되는 값을 HTTP 응답 본문으로 직접 반환할 때 사용돼. 주로 JSON이나 문자열 데이터를 반환할 때 유용해.
• 주요 특징:
• 반환 값을 JSON 또는 XML로 자동 변환해줘.
• 주로 REST API에서 사용돼.
• 예시:
@GetMapping("/users/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
// JSON으로 반환
return user;
}
24. HttpEntity
• 설명: HTTP 요청 및 응답에 대한 전체적인 정보를 캡슐화하는 클래스. 요청 본문뿐만 아니라 헤더 정보도 함께 처리할 수 있어.
• 예시:
@PostMapping("/entity")
public ResponseEntity<String> handleRequest(HttpEntity<String> requestEntity) {
String requestBody = requestEntity.getBody();
HttpHeaders headers = requestEntity.getHeaders();
return new ResponseEntity<>("Processed", HttpStatus.OK);
}
25. ResponseEntity
• 설명: HTTP 응답을 직접 제어할 수 있는 클래스로, 상태 코드, 헤더, 본문을 모두 설정할 수 있어. 응답 본문뿐만 아니라 HTTP 상태 코드도 함께 지정할 수 있다는 점에서 강력해.
• 예시:
@GetMapping("/response")
public ResponseEntity<String> handleResponse() {
return new ResponseEntity<>("Response body", HttpStatus.OK);
}
26. Jackson JSON
• 설명: Spring은 기본적으로 Jackson 라이브러리를 사용해서 객체를 JSON으로 변환해. @RequestBody와 @ResponseBody를 사용하면 Jackson이 객체를 JSON으로 직렬화하거나 역직렬화하는 역할을 해.
• 예시:
@PostMapping("/json")
public String handleJson(@RequestBody User user) {
return "Received user: " + user.getName();
}
'Apache Tomcat' 카테고리의 다른 글
MVC Config API (0) | 2024.10.15 |
---|---|
Enable MVC Configuration (0) | 2024.10.15 |
@GetMapping, @PostMapping (0) | 2024.10.08 |
@RestController, View Resolver, RESTful API (0) | 2024.10.08 |
Spring MVC, SessionFactory Bean, ContextLoaderListener, ServletContextListener (1) | 2024.10.08 |