[Spring] @RequestParam vs @PathVariable

Yoon Uk·2023년 5월 10일
0

Spring

목록 보기
1/5
post-thumbnail
post-custom-banner

Controller에서 크게 @RequestParam, @PathVariable, @RequestBody의 방식으로 요청을 받습니다.

이 중 @RequestParam@PathVariable 방식을 사용하는 방법과 차이에 대해 알아보겠습니다.

@RequestParam@PathVariable은 모두 요청 URI에서 값을 추출할 때 사용됩니다.

1. Query Parameter 과 URI Path

1) @RequestParam

@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);
    }
    
}

2) @PathVariable

@PathVariableURI 경로에서 값을 추출합니다.

아래와 같이 요청을 보내면

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);
    }
    
}

2. 인코딩 여부

@PathVariable는 URI 경로에서 값을 추출하기 때문에 인코딩되지 않습니다.
반면에 @RequestParam는 인코딩됩니다.

1) @RequestParam

http://localhost:8080/articles?keyword=키워+드

결과: keyword를 출력해보면
키워 드
가 출력된다.

2) @PathVariable

http://localhost:8080/articles/키워+드

결과: keyword를 출력해보면
키워+드
가 출력된다.

post-custom-banner

0개의 댓글