Apache Tomcat / / 2024. 10. 11. 12:48

@RequestMapping handler method

@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은 요청 데이터(문자열)를 컨트롤러 메서드의 인자 타입으로 자동 변환할 수 있는 강력한 타입 변환 메커니즘을 제공해. 예를 들어, Stringint, 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();
}
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유