Controller에서 크게 @RequestParam
, @PathVariable
, @RequestBody
의 방식으로 요청을 받습니다.
이 중 @RequestParam
과 @PathVariable
방식을 사용하는 방법과 차이에 대해 알아보겠습니다.
@RequestParam
과 @PathVariable
은 모두 요청 URI에서 값을 추출할 때 사용됩니다.
@RequestParam
는 쿼리 문자열
에서 값을 추출합니다.
아래와 같이 요청을 보내면
http://localhost:8080/articles?keyword=키워드
아래와 같이 요청을 받을 수 있습니다.
@RestController
@RequestMapping("/articles")
public class ArticleController {
@GetMapping
public ResponseEntity<List<ArticleDto>> getLimitedSortedArticlesOfKeyword(
@RequestParam(defaultValue = "") String keyword,
@RequestParam(defaultValue = "100") int limit) {
List<ArticleDto> result = articleService.searchArticlesByKeyword(keyword, limit);
return new ResponseEntity<>(result, HttpStatus.OK);
}
}
@PathVariable
는 URI 경로
에서 값을 추출합니다.
아래와 같이 요청을 보내면
http://localhost:8080/articles/2
아래와 같이 요청을 받을 수 있습니다.
@RestController
@RequestMapping("/articles")
public class ArticleController {
@GetMapping(value = "/{articleId}")
public ResponseEntity<ArticleDto> getArticle(@PathVariable long articleId) {
result = articleService.getArticle(articleId);
return new ResponseEntity<>(result, HttpStatus.OK);
}
}
@PathVariable
는 URI 경로에서 값을 추출하기 때문에 인코딩되지 않습니다.
반면에 @RequestParam
는 인코딩됩니다.
http://localhost:8080/articles?keyword=키워+드
결과: keyword를 출력해보면
키워 드
가 출력된다.
http://localhost:8080/articles/키워+드
결과: keyword를 출력해보면
키워+드
가 출력된다.