@RequestMapping

코딩냥이·2024년 9월 10일

Annotation

목록 보기
20/34

@RequestMapping

@RequestMapping 어노테이션은 스프링 MVC에서 HTTP 요청을 특정 컨트롤러 클래스나 핸들러 메소드에 매핑하는 데 사용됩니다.

기능

  • HTTP 요청을 특정 컨트롤러 메소드에 매핑합니다.
  • URL, HTTP 메소드, 요청 매개변수, 헤더 등 다양한 조건으로 매핑을 설정할 수 있습니다.
  • 클래스 레벨과 메소드 레벨에 모두 적용할 수 있습니다.

사용 방법

기본적인 사용 방법은 다음과 같습니다:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @RequestMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        // 사용자 조회 로직
    }

    @RequestMapping(method = RequestMethod.POST)
    public User createUser(@RequestBody User user) {
        // 사용자 생성 로직
    }
}

주요 특징

  1. 다양한 매핑 조건: URL, HTTP 메소드, 파라미터, 헤더 등 다양한 조건으로 매핑을 설정할 수 있습니다.
  2. 계층적 매핑: 클래스 레벨과 메소드 레벨의 @RequestMapping을 조합하여 사용할 수 있습니다.
  3. 유연한 URL 패턴: Ant-style 경로 패턴, 정규표현식 등을 지원합니다.
  4. 미디어 타입 처리: 요청과 응답의 미디어 타입을 지정할 수 있습니다.

주요 속성

1. value 또는 path

요청 URL을 지정합니다.

@RequestMapping("/hello")
public String hello() {
    return "Hello, World!";
}

2. method

허용할 HTTP 메소드를 지정합니다.

@RequestMapping(value = "/users", method = RequestMethod.POST)
public User createUser(@RequestBody User user) {
    // 사용자 생성 로직
}

3. params

특정 파라미터가 있거나 없는 경우에만 매핑합니다.

@RequestMapping(value = "/users", params = "type=admin")
public List<User> getAdminUsers() {
    // 관리자 사용자 목록 조회 로직
}

4. headers

특정 헤더가 있거나 없는 경우에만 매핑합니다.

@RequestMapping(value = "/data", headers = "content-type=application/json")
public Data getData() {
    // JSON 데이터 반환 로직
}

5. consumes 및 produces

요청이나 응답의 미디어 타입을 지정합니다.

@RequestMapping(value = "/users", consumes = "application/json", produces = "application/json")
public User updateUser(@RequestBody User user) {
    // 사용자 업데이트 로직
}

HTTP 메소드별 단축 어노테이션

@RequestMapping의 method 속성을 더 간편하게 사용할 수 있는 단축 어노테이션들이 있습니다:

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

사용 예:

@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
    // 사용자 조회 로직
}

@PostMapping
public User createUser(@RequestBody User user) {
    // 사용자 생성 로직
}

경로 변수 (Path Variables)

URL 경로의 일부를 변수로 사용할 수 있습니다:

@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) {
    // id를 이용한 사용자 조회 로직
}

요청 파라미터 처리

@RequestParam을 사용하여 요청 파라미터를 처리할 수 있습니다:

@GetMapping("/users")
public List<User> searchUsers(@RequestParam(required = false) String name) {
    // name 파라미터를 이용한 사용자 검색 로직
}

미디어 타입 협상

produces 속성을 사용하여 응답의 미디어 타입을 지정할 수 있습니다:

@GetMapping(value = "/users", produces = {"application/json", "application/xml"})
public List<User> getUsers() {
    // 사용자 목록 반환 로직
}

테스트

@RequestMapping이 적용된 컨트롤러를 테스트할 때는 MockMvc를 사용할 수 있습니다:

@WebMvcTest(UserController.class)
class UserControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void testGetUser() throws Exception {
        mockMvc.perform(get("/api/users/1"))
               .andExpect(status().isOk())
               .andExpect(jsonPath("$.id").value(1));
    }
}

주의사항

  1. URL 중복: 동일한 URL 패턴에 대해 중복 매핑이 발생하지 않도록 주의해야 합니다.
  2. 메소드 시그니처: 핸들러 메소드의 파라미터와 반환 타입이 올바르게 설정되어야 합니다.
  3. 보안: 권한이 필요한 엔드포인트에 대해서는 적절한 보안 처리가 필요합니다.

베스트 프랙티스

  1. RESTful 설계: URL과 HTTP 메소드를 RESTful 원칙에 따라 설계하세요.
  2. 명확한 URL 패턴: URL 패턴을 명확하고 일관성 있게 설계하세요.
  3. 적절한 HTTP 메소드 사용: 각 작업의 의미에 맞는 HTTP 메소드를 사용하세요.
  4. 버전 관리: API 버전 관리를 고려하여 URL을 설계하세요.
  5. validation: 요청 데이터에 대한 적절한 유효성 검사를 수행하세요.

결론

@RequestMapping 어노테이션은 스프링 MVC에서 HTTP 요청을 처리하는 핵심 요소입니다. 이를 통해 개발자는 URL, HTTP 메소드, 요청 파라미터 등 다양한 조건에 따라 요청을 적절한 핸들러 메소드에 매핑할 수 있습니다. 올바르게 사용하면 명확하고 RESTful한 API를 쉽게 구현할 수 있으며, 스프링의 강력한 기능들과 결합하여 효율적인 웹 애플리케이션을 개발할 수 있습니다.

연관 포스팅

@Controller
@RestController
@PathVariable
@RequestParam
@RequestBody

profile
HelloMeow~!

0개의 댓글