스프링부트에서는 데이터를 전달 받을 때 @PathVariable 방식과 @RequestParam 방식이 있습니다.
둘다 URL에 매개변수를 넣어서 받는 방식입니다.
그러나 두가지 방식에는 약간의 차이가 있습니다.
1. @PathVariable
@PathVariable방법은 슬래쉬안에 매개변수를 넣는 방법입니다. 이 방법은 key값이 필요하지 않습니다.
예컨대 data라는 변수에 "test"를 담아서 전송하고 싶다면 http://127.0.0.1:8080/main/list/test로 전송하면 됩니다.
그리고 서버에서는 @GetMapping("/main/list/{data}")로 받으면 됩니다. 여기서 data라는 변수를 사용하지 않아도 되지만 @PathVariable에는 {}안의 변수와 동일한 변수를 사용해야합니다.
예컨대 이렇게 작성해야합니다.
@ResponseBody
@GetMapping("/main/list/{data}")
public String getMain(@PathVariable String data) throws Exception{
//@PathVariable("data") String dataValue 도 가능
return "{\"status\":\"success\"}";
}
일반적으로 수정, 삭제 등 API호출을 할때 많이 사용합니다. 그리고 @PathVariable을 두개 이상을 넣는것도 가능합니다.
@ResponseBody
@GetMapping("/main/list/{data}/{data2}")
public String getMain(@PathVariable String data, @PathVariable String data2) throws Exception{
//@PathVariable("data") String dataValue 도 가능
return "{\"status\":\"success\"}";
}
2. @RequestParam
@RequestParam 방법은 ?key=value값으로 전송하는 것입니다. 일반적으로 GET방식으로 호출할 때 많이 사용합니다.
위와 동일하게 data라는 변수에 test를 담아서 전송하고 싶다면 http://127.0.0.1:8080/main/list?data=test로 전송하면 됩니다.
그리고 서버에서는 @GetMapping("/list")로 받고 @RequestParam에 변수를 넣으면 됩니다.
예를 들면 아래와 같습니다.
@GetMapping("/main/list")
public String getMain(@RequestParam String data) throws Exception{
//@PathVariable(value="data") String dataValue 도 가능
return "/main/list";
}
이 때 @RequestParam(value="data", required = false)을 사용하게 되면 data라는 키값을 넣지않아도 에러가 발생하지 않습니다. 즉 경로에 http://127.0.0.1:8080/main/list로 호출해도 된다는 것입니다.
이 방법은 검색 기능을 넣을 때 활용가능합니다.
또한 defaultValue라는 옵션도 있는데 이 옵션은 key값이 없을때 기본값을 지정해 놓을 수 있습니다.
@ResponseBody
@GetMapping("/v1/get-items")
public String getItemsAll(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "pageSize",defaultValue = "100") int pageSize) throws Exception{
return "{\"status\":\"success\"}";
}
이렇게 사용함으로써 DB에서 데이터를 가져올때 분할하여 가져올 수 있습니다. 주의할점은 int형이라도 defaultValue에는 문자형태를 넣어야한다는 것입니다.
'JAVA Programming > SpringBoot' 카테고리의 다른 글
[SPRINGBOOT] ObjectMapper (1) | 2024.12.13 |
---|---|
[SPRINGBOOT] 스케줄링 (1) | 2024.12.12 |
[SPRINGBOOT] 인텔리제이 환경설정 (1) | 2024.12.12 |
[SPRINGBOOT] 프로젝트 생성 (0) | 2024.12.12 |