@RequestParam 과 @PathVariable의 차이

개발하는 구황작물·2022년 8월 17일
0

Spring

목록 보기
3/6

spring에서 controller작업을 할 때 @RequestParam과 @PathVariable을 자주 사용하게 된다. 비슷해보이지만 다른 두 애노테이션에 대해 알아보자.

이 둘의 어노테이션은 http의 stateless를 극복하기 위해 만들어진 방법으로 uri를 통해 전달된 값을 파라미터로 받아오는 공통점이 있다.

url을 자세히 보면 두가지 다른 형태의 url을 볼 수 있다.

  1. http://abc?id=1&page=2
  2. http://abc/id/1

첫 번째 같은 방식은 쿼리 스트링이라 하며 get방식의 통신을 할 때 주로 사용된다.
두 번째 방식은 REST 통신할 때 사용된다.

1. @RequestParam

@RequestParam은 파라미터를 명시하면서 조회를 요청하는 방법이다.

@RestController
@RequestMapping("/test")
public class TestController {
	
    ...
	@GetMapping("/user")
    public String test(@RequestParam("userId") String userId,
   					   @RequestParam("name") String name) {
    	
    	return "test";
    	}
}

위의 경우 /user?userId=1&name=[name] 형식으로 url이 만들어진다.

입력 받을 파라미터가 많은 경우 사용된다.

만약 requestParam이 반드시 필요하지 않다면 required=false 설정을 하면된다.

@PathVariable

PathVariable의 경우 url에서 각 구분자에 들어오는 값을 처리해야 할 때 사용한다.

@RestController
@RequestMapping("/test")
public class TestController {
	
    ...
	@GetMapping("/user/{user-id}")
    public String test(@PathVariable(value = "user-id")Long userId) {
    	
    	return "test";
    	}
}

위의 경우 user/1 같은 형식으로 url가 만들어진다.
@PathVariable은 요청을 하나만 보낼 수 있다.

두 가지 혼합하여 사용하는 경우

@RestController
@RequestMapping("/test")
public class TestController {
	
    ...
	@GetMapping("/user/{user-id}")
    public String test(@PathVariable(value = "user-id")String userId,
    @RequestParam(value = "name") String name,
    @RequestParam(valud = "gender") String gender) {
    	
        // /user/1?name=[name]&gender=[gender]
    	return "test";
    	}
}

위와 같이 사용하면 id값에 여러 파라미터를 주고받을 수 있게 된다.

profile
어쩌다보니 개발하게 된 구황작물

0개의 댓글