본격적으로 코인 프로젝트에 참여하기 전에 온보딩을 하였다. 그 일환으로 초록 스터디를 4주간 진행하였고 알게 된 것들을 정리해보려 한다.
사실 원래라면 블로그 작성이 참 귀찮아서 또 차일 피일 미루다가 안 했을 것 같다ㅋㅋㅋㅋㅠ 하지만 알게 된 것들을 블로그로 정리해보라고 주노가(우리 BCSD회장) 권유 해줬고 알게 된 것을 정리 하며 블로그 작성을 해보려고 한다. 블로그 작성을 참 좋은 시기에 시작할 수 있게 주노가 자연스럽게 권해준 것 같다.(참 좋은 사람을 회장으로 둔 것 같다.😊)
RequestParam과 PathVariable의 차이
첫 주차 미션을 진행하면서는 지금까지 막 쓰던 RequestParam과 PathVariable의 차이에 대해 알게 되었다
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteReservations(@PathVariable Long id) {
reservationService.deleteReservation(id);
return ResponseEntity.noContent().build();
}
예약 삭제를 담당하는 컨트롤러인데 해당 PathVariable부분을 RequestParam으로 입력해서
Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'id' for method parameter type Long is not present]
위와 같은 에러가 발생했다. 기본적인 이해가 없이 막 사용하다 에러로 당한 것이다..
찾아서 정리한 바는 다음과 같다
requestparam
사용목적 :
주로 GetMapping과 사용되면서 URL의 쿼리 파라미터에서 값을 추출하는데 사용되며 파라미터의 이름으로 바인딩 한다
@GetMapping("/reservations")
public ResponseEntity<Reservation> getReservationById(@RequestParam("id") Long id) {
// ...
}
위의 컨트롤러는 다음과 같은 요청을 날린다 (/reservations?id=123)
pathvariable
사용 목적:
주로 url 경로(path)에서 값을 추출하는데 사용된다
@GetMapping("/reservations/{id}")
public ResponseEntity<Reservation> getReservationById(@PathVariable("id") Long id) {
// ...
}
위의 컨트롤러는 다음과 같은 요청을 날린다(/reservations/123)
추가 정보
(1) 위와 같은 특성 때문에 경로에 노출되어야 하는 정보는 @pathvariable을 사용하고 URL에 직접 노출되지 않아야 하며 선택적인 쿼리 파라미터를 사용할때 @requestparam을 사용한다.
(2) @PathVariable은 일반적으로 경로에서 하나의 변수만 추출하는데 사용되며 @RequestParam은 여러 쿼리 파라미터를 동시에 받을 수 있다
뭐든 이해하고 쓰는 것의 중요성을 느낄 수 있었던 미션이였던 것 같다.