Controller에서 사용되는 @PathVariable에 대해서 알아보겠습니다.

@RequestMapping의 URI의 경로 변수를 넣어주는 역할을 합니다.

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {

   @AliasFor("name")
   String value() default "";

   @AliasFor("value")
   String name() default "";

   boolean required() default true;
}

@PathVariable name, value 속성

name과 value는 서로 Alias입니다. 따라서 둘 중 하나를 골라서 사용하면 됩니다. 이름으로 경로 변수를 바인딩해줍니다.

@GetMapping(value = "/path/{name}") 
public String path1(@PathVariable("name")String name) {
    return "path1";
}
@GetMapping(value = "/path/{name}") 
public String path2(@PathVariable(value = "name") String name) {
    return "path2";
}

@GetMapping(value = "/path/{name}") 
public String path3(@PathVariable String name) {
    return "path3";
}
  • {}로 감싸진 것이 @PathVariavle과 바인딩될 템플릿 변수입니다.
  •  path1 처럼 value 속성이 default 이므로 "name"으로 바로 줄 수 있고, 명시해주고 싶다면 path2처럼 value = "name"으로 명시해줄 수 있습니다.
  • 템플릿 변수명과 @PathVariable로 받을 변수명이 같다면 value값을 생략할 수 있습니다.

@PathVariable required 속성

required = ture가 default이며, true시 값이 없다면 오류가 나옵니다. 하지만 required = false 라면 오류를 발생시키지 않습니다.

@GetMapping(value = {"/path/{name}, /path"})
public String path1(@PathVariable(value = "name",required = false)String name) {
  	if(name==null){
    	name = hi;
    }
    return "path1";
}
  • value = {"/path/{name}","/path"}를 준다면 PathVariable 속성이 반드시 필요하지 않은 것이기 때문에 오류를 터트리지 않습니다. 
  • 단 여러 개의 인자를 넘길 수 없습니다. 

지금까지 @PathVariable에 대해서 알아봤습니다. 감사합니다.