-
[Spring] @PathVariable 기본값 설정하기programming/Spring 2020. 12. 6. 22:00반응형
@Controller에서 파라미터를 받는 방법은 아래와 같은 방법들이 있다.
1. /API_NAME?key1=val1 2. /API_NAME/{value1}
선호하는 방식대로 하면 되겠지만, 여기서는 2번과 관련된 글이다.
2번과 같은 방식으로 받기 위해서는 @Controller에서 @PathVariable을 사용하면 된다.
@GetMapping("/test/{cnt}") public String methodName(@PathVariable int cnt){ // TODO.. return "test"; }
위와 같이 코드를 작성하면,
"localhost:8080/test/3"과 같이 호출했을 때 cnt 값이 3이 된다.
하지만, 만약에 "localhost:8080/test"와 같이 변수를 넣어주지 않으면 에러가 발생한다.
Resolved [org.springframework.web.bind.MissingPathVariableException: Missing URI template variable 'cnt' for method parameter of type int
이럴 때는 아래와 같이 처리할 수 있다.
@GetMapping(value = {"/test/{cnt}", "/test"}) public String methodName(@PathVariable int cnt){ // TODO.. return "test"; }
위와 같이 만들면, "localhost:8080/test"처럼 호출해도 에러는 나지 않는다.
**** 내용 수정(2020-12-13) ****
위 코드처럼 작성했던 이유는 value를 추가해서 PathVariable의 기본값을 설정하고 싶었던 의도였는데,
저대로 작성하고 제대로 cnt에 값이 안 들어오면 에러가 난다.
그때는 파라미터의 속성을 "required = false"로 설정해주고,
null이 들어왔을 때 기본값을 설정해준다.
@GetMapping(value = {"/test/{cnt}", "/test"}) public String methodName(@PathVariable(required = false) Integer cnt){ if(cnt == null) cnt = 1; // TODO.. return "test"; }
또는 Optional을 이용해서 처리할 수 있다.
@GetMapping(value = {"/test/{cnt}", "/test"}) public String methodName(@PathVariable(required = false) Optional<Integer> cnt){ int num = Optional.orElse(1); // TODO.. return "test"; }
Optional에 대한 정리는 다음에 작성 예정이다.
반응형'programming > Spring' 카테고리의 다른 글
[Spring] RestTemplate 한글 깨짐 (0) 2022.02.26 [Spring] "}"은(는) 예상되지 않았습니다. (0) 2021.04.12 [Spring] 코로나 감염 현황 OpenApi 사용하기 (0) 2020.11.25 [Spring] xml 데이터 처리하기2 (코로나 OpenAPI) (2) 2020.11.23 [Spring] xml 데이터 처리하기 (0) 2020.11.09