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에 대해서 알아봤습니다. 감사합니다.
댓글을 사용할 수 없습니다.