저번 포스트에 이어서 GET의 Path variable에 대해서 알아보자.
아래의 예시로 알아보자.
@RestController
@RequestMapping("/api")
public class RestApiController {
@GetMapping(path = "/echo/{message}") //{} 안의 변수명과 동일하게 만들어주면 된다.
public String echo(
@PathVariable
String message //path의 {}안에 있는 변수와 동일하게..
){
System.out.println("echo message is "+message);
//TODO 대문자로 변환
message = message.toUpperCase();
return message;
}
}
URL의 경로를 변수로 사용하기 위해서는 GetMapping 어노테이션을 붙여주고 경로에 {변수명}을 넣어준다.
그리고 메서드의 String 파라미터에 @PathVariable 어노테이션을 붙여준후 변수를 사용하면 된다.
@PathVariable 을 가지는 파라미터가 정수형을 가지려고 할 때 Integer과 Int 두가지 선택지가 있다.
둘의 차이를 먼저 이야기 하자면
- Integer
Integer은 Java에서 제공하는 Wrapper 클래스입니다.
null 값을 허용합니다.
기본값은 null입니다.- int
int는 Java에서 제공하는 기본 자료형입니다.
null 값을 허용하지 않습니다.
기본값은 0입니다.- PathVariable에서의 사용
PathVariable을 지정할 때 Integer을 사용하면, URL 경로에서 값이 누락되거나 잘못된 값이 입력된 경우 null 값이 전달됩니다.
PathVariable을 지정할 때 int을 사용하면, URL 경로에서 값이 누락되거나 잘못된 값이 입력된 경우 NumberFormatException 예외가 발생합니다.
@GetMapping(path = "/echo/{message}/age/{age}/is-man/{isMan}") //{} 안의 변수명과 동일하게 만들어주면 된다.
public String echo(
@PathVariable String message, //path의 {}안에 있는 변수와 동일하게..
@PathVariable int age,
@PathVariable boolean isMan
){
System.out.println("echo message is "+message);
System.out.println("echo age is "+age);
System.out.println("echo isMan is "+isMan);
//TODO 대문자로 변환
message = message.toUpperCase();
return message;
}