그날그날메모

Spring @RequestParam 대 @PathVariable 어노테이션

Java

Spring @RequestParam 대 @PathVariable 어노테이션

그날그날메모 2021. 4. 17. 01:18

1. 개요

이 빠른 사용방법(예제)에서는 Spring의 @RequestParam@PathVariable 어노테이션 의 차이점을 살펴 보겠습니다 .

@RequestParam@PathVariable 은 모두 요청 URI에서 값을 추출하는 데 사용할 수 있지만 약간 다릅니다.

2. 쿼리 매개 변수와 URI 경로

@RequestParam 은 쿼리 문자열에서 값을 추출 하지만 @PathVariables 는 URI 경로에서 값을 추출합니다.

@GetMapping("/foos/{id}")
@ResponseBody
public String getFooById(@PathVariable String id) {
    return "ID: " + id;
}

그런 다음 경로를 기반으로 매핑 할 수 있습니다.

http://localhost:8080/foos/abc
----
ID: abc

그리고 대한 @RequestParam, 그것은 것입니다 :

@GetMapping("/foos")
@ResponseBody
public String getFooByIdUsingQueryParam(@RequestParam String id) {
    return "ID: " + id;
}

동일한 응답을 제공하고 다른 URI를 제공합니다.

http://localhost:8080/foos?id=abc
----
ID: abc

3. 인코딩 된 값과 정확한 값

@PathVariable 은 URI 경로에서 값을 추출 하기 때문에 인코딩되지 않습니다. 반면에  @RequestParam 은 있습니다.

이전 예제를 사용하면 ab + c 는있는 그대로 반환됩니다.

http://localhost:8080/foos/ab+c
----
ID: ab+c

그러나 @RequestParam  요청의 경우 매개 변수는 URL 디코딩됩니다.

http://localhost:8080/foos?id=ab+c
----
ID: ab c

4. 옵션 값

@RequestParam@PathVariable은 선택 사항이 될 수 있습니다.

Spring 4.3.3부터 필수 속성 을 사용하여 @PathVariable을 선택적으로 만들 수 있습니다 .

@GetMapping({"/myfoos/optional", "/myfoos/optional/{id}"})
@ResponseBody
public String getFooByOptionalId(@PathVariable(required = false) String id){
    return "ID: " + id;
}

그러면 다음 중 하나를 수행 할 수 있습니다.

http://localhost:8080/myfoos/optional/abc
----
ID: abc

또는:

http://localhost:8080/myfoos/optional
----
ID: null

들어 @RequestParam , 우리는 또한 사용할 수 있습니다 필요한 속성을.

주의 할 때 우리가주의해야 @PathVariable 경로에 피하기 충돌, 옵션을.

5. 결론

이 기사에서는 @RequestParam@PathVariable 의 차이점을 배웠습니다 .

예제의 전체 소스 코드는 GitHub 에서 찾을 수 있습니다 .

참고
  • https://docs.spring.io/spring-framework/docs/current/reference/html
  • https://www.baeldung.com/spring-requestparam-vs-pathvariable