[JPA] @RequestParam vs @PathVariable

TomCat·2023년 4월 27일
0

Java JPA를 사용하다 보면 api를 사용할 경우가 많은데 Controller 단에 @GetMapping을 사용하여 원하는 DB를 조회할 수 있는 방법이 여러가지가 있다는 것을 깨닳았다.
(사실 본인은 2개만 사용해서 더 있는지 모름)
해당 방법은 클라이언트가 서버에 데이터를 전달하는데 사용한다.
대표적으로 @RequestParam와 @PathVariable가 있는데 각각의 사용법과 사용하는 경우 그리고 장단점을 알아보자!!

@RequestParam

사용법

@GetMapping(value = "test")
public Long testParam(@RequestParam("id") Long Id {
	return... ;
}

defaultValue - 값이 설정되지 않을 때 기본으로 설정할 값
name - 바인딩할 요청 파라미터의 이름
value - name의 별칭
required - 필수 값인지 설정하는 값

  • ex) @RequestParam(value = "id", name = "realId", defaulValue = "0", required = true)

  • 해석)
    realId 라는 파라미터 이름으로 조회
    들어오는 파라미터 값은 id에 할당
    value 값이 없다면 default 값으로 0 할당
    id라는 값은 필수적으로 입력

api요청(id가 1인 Column 조회)

http://localhost:8080/test?id=1
url 뒤에 ? (@RequestParam("xx")에 들어가는 파라미터 key) = (조회 할 파라미터 value)
해당 value는 Long id로 읽힌다.

장점

  • Key=value 형식이므로 url 내에서 파라미터가 명시되므로 구분하기 쉽다.
  • 여러개의 인자를 한꺼번에 받아서 처리할 수 있다.
    http://localhost:8080/test?id=1&userid=2&age=30
  • 매개 변수를 입력하지 않을 경우 기본 값으로 호출된다.
  • 매개 변수의 순서를 변경할 수 있다.

단점

  • 파라미터 값이 디코딩 돼서 들어온다.
    ex) http://localhost:8080/test?id=1+2
    -> id = 1 2
  • 매개 변수가 추가될 때마다 코드를 수정해야 한다.
  • URL이 매우 길어질 수 있다.

@PathVariable

사용법

@GetMapping(value = "test/{id}")
public Long testVariable(@PathVariable Long id) {
	return... ;
}

api요청(id가 1인 Column 조회)

http://localhost:8080/test/1
url 뒤에 조회할 value 값만 기재 { } 안에 들어가는게 Long id로 읽힌다.

장점

  • URL에 많은 정보를 추가할 수 있다.
  • 복잡하게 얽힌 Entity라면 경로의 규칙을 강제로 정하여 조회할 수 있다.

단점

  • 조회할 파라미터가 많을 경우 구분하기가 어렵다.
  • 한개의 인자만 받을 수 있다.
  • 매개 변수의 순서를 변경할 수 없다.
  • URL이 복잡하거나 길어질 수 있다.

@RequestParam, @PathVariable 2개 복합 사용

@GetMapping("/test/{id}")
public Long testCombo(
  @PathVariable Long id,
  @RequestParam(value = "MyId", required=false) Long myId) {
    return... ;
}

/test/123?myId=1
@PathVariable를 사용하여 입력받은 파라미터 값이 123인 Long id 조회해서 데이터를 추출하고
그 중에서
@RequestParam을 사용하여 myId에 입력받은 파라미터 값이 1인 Long myId 조회해서 최종 추출

정리

@RequestParam -> value 파라미터 key 값을 주면 value 값은 ?key=x 로 요청
@PathValiable -> value 파라미터를 설정하면 url에 직접 파라미터 value 값 넣기 /{value}

0개의 댓글