No-ah98
Noah
No-ah98
전체 방문자
오늘
어제
  • 분류 전체보기 (40)
    • CS (7)
      • Java (7)
    • shell (1)
    • 개발 실수 (1)
    • 웹 (1)
    • Git (1)
    • 부트캠프 (1)
    • 링크 (0)
    • 오류 (0)
    • 일정 (0)
    • 객체지향 (4)
    • CodingTest (6)
    • TIL (2)
    • JPA (7)
    • JAVA (0)
    • 기타 (0)
    • Spring (5)
    • 알고리즘 (1)
      • 백준 (1)
      • 프로그래머스 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Javascript 공백 체크
  • 멋쟁이사자처럼
  • 연관관계 편의 메서드
  • 프로그래머스
  • 중복제거
  • 객체지향
  • 연관관계 편의 메서드 필요성
  • bash shell 기본 명령어
  • JPA
  • 캡슐화
  • form 공백 체크
  • Entity
  • 문자열
  • @RequestBody
  • @ModelAttribute
  • @RequestParam
  • 문자 뒤집기
  • @RequestBody@ModelAttribute 차이
  • @Controller
  • @PathVariable vs @RequestParam
  • 멋사 백엔드
  • 연관관계
  • 데이터 셋팅
  • 11726
  • VO
  • 타일링
  • 연관관계 매핑
  • @RequestBody vs @ModelAttribute
  • 엔티티 매핑
  • 영속성 관리
  • 백엔드 스쿨
  • 문장 뒤집기
  • 대댓글
  • @RestController
  • 깃 정리
  • DTOvsVO
  • 멋쟁이사자처럼 백엔드 스쿨
  • @Controller vs @RestController
  • @PathVariable vs @RequestParam 차이
  • Git 정리
  • 2xn타일링
  • 팰린드롬
  • JPA데이터셋팅
  • 중복문자제거
  • 백준
  • @PathVariable
  • 해시
  • 계층형 댓글
  • 양방향 연관관계
  • spring data jpa

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
No-ah98

Noah

Spring

@PathVariable vs @RequestParam [Spring]

2022. 9. 13. 00:07

스프링에서 Controller 단에서 흔히 사용하는 @RequestParam 어노테이션과 @PathVariable 어노테이션

사용도중 쓰임이 비슷하여 차이점을 명확히 알고싶어서 정리하게 됐습니다.


먼저, 두 어노테이션은 http의 비연결성을 극복하고 데이터 전달을 위한 방법입니다.
즉, uri를 통해 전달된 값을 파라미터로 받아오는 역할을 합니다. 

  • http://localhost:8080/article/comment?name=홍길동&age=20
  • http://localhost:8080/article/comment/1

먼저, 정리해보면 첫번째와 같이 쿼리스트링을 통해 여러개의 값을 전달하는 첫번째 방식은 @RequetParam이고 두 번째 방식은 @PathVariable 입니다.

 

Case 1의 경우 파라미터의 값과 이름을 함께 전달하는 방식으로 게시판 등에서 페이지 및 검색 정보를 함께 전달하는 방식을 사용할 때 많이 사용합니다.

Case 2의 경우 URL, Rest api에서 값을 호출할 때 주로 많이 사용합니다.

 

@RequestParam

  • @RequestParam("실제 값") 자료형 `설정할 변수 이름`
    -> URL이 전달될 때 name 파라미터(name에 담긴 value)를 담아옴.
  • defaultValue - 값이 설정되지 않을 때 기본으로 설정할 값
  • name - 바인딩할 요청 파라미터의 이름
  • value -  name의 별칭
  • required  - 필수 값인지 설정하는 값
@RestController
public class TestController (){

  @GetMapping("/article/comment")
  public String test(@RequestParam("name") String name, 
                     @RequestParam("age")  int age){
    //아래와 같이 해당 변수에 파라미터값이 할당된다.
    //name = "홍길동"
    //age   = "11"
    return "TEST 성공"
  }
  
}

위와 같이 @RequestParam 지정한 키값이 존재하지 않다면 BadRequest로 4xx 에러가 발생합니다.

이를 방지하기 위해 필수적이지 않도록 그리고 존재하지 않다면 DefaultValue를 지정할 수 있습니다.

@RestController
public class TestController (){

  @GetMapping("/article/comment")
  public String test(@RequestParam(value="name", required=false, defaultValue ="0") String name){
    
    return "TEST 성공"
  }
  
}
만약 파라미터가 많아지게 된다면?

위 예시는 파라미터가 2개이지만, 만약에 파라미터가 3개 이상일 경우에는 어떨까요??

가독성도 떨어지고 코드가 길어질 수 있습니다.

이럴때 유용한게 "Map" 입니다.

하지만, 개발한 이외의 사람들은 파라미터가 뭐가 들어올지를 모르기 때문에 유지보수하기에는 어렵다는 단점이 있습니다.

 

@RestController
public class TestController (){

  @GetMapping("/article/comment")
  public String test(@RequestParam HashMap<Stirng, String> paramMap){
    Stirng data = paramMap.get("name");
    return "성공";
  }
  
}

@PathVariable

메소드 정의에서 위에 쓴 변수명을 그대로 @PathVariable("변수명") 

@RestController
public class TestController (){

  @GetMapping("/article/comment/{id}")
  public String test(@PathVariable Long id){
	Member member = memberRepository.findById(id);
    return new MemberResponseDto(member);
  }
  
}

참고

https://inseok9068.github.io/springboot/springboot-parameter/

'Spring' 카테고리의 다른 글

@RequestBody vs @ModelAttribute  (0) 2022.09.25
연관관계 편의 메서드 필요성 [Spring]  (0) 2022.09.13
@Controller에서 vs @RestController [Spring]  (0) 2022.09.12
DTO vs VO  (0) 2022.07.15
    'Spring' 카테고리의 다른 글
    • @RequestBody vs @ModelAttribute
    • 연관관계 편의 메서드 필요성 [Spring]
    • @Controller에서 vs @RestController [Spring]
    • DTO vs VO
    No-ah98
    No-ah98

    티스토리툴바