-
스프링 controller에서 파라미터를 받는 다양한 방법 ( @RequestParam, @RequestBody, @PathVariable)Knowledge/Spring 2019. 9. 4. 11:15반응형
컨트롤러에서 파라미터를 받을 수 있는 다양한 방법이 있다
1. @RequestParam 어노테이션 활용
GET방식으로 넘어온 URI의 queryString을 받기에 적절해
html부터 단계별(?)로 밟아온 사람이라면 가장 쉽게 이해할 수 있을 어노테이션이다.
예를 들어 http://localhost:8080/reservation/api/reservations?reservationEmail=test@naver.com 이런 URI가 있다고 치면
Controller 단에서
1234567891011@RestController@RequestMapping(path = "/api")public class ReservationsApiController {// email로 예약 내역 조회@GetMapping(path = "/reservations")public Response<List<String>> getReservations(@RequestParam(value = "reservationEmail",required = false) String reservationEmail) {return reservationService.getReservationByEmail(reservationEmail);}@RequestParam을 이렇게 쓰면 받을 수 있다.
value에는 넘어오는 파라미터의 name값을 적으면 되고
( value인데 name 값을 받는다. 근데 name 속성도 있다. 검색해보니 결국 같다고.. ㅋ 골라쓰면 되는 듯 하다)
required = false는 필수는 아니지만 @RequestParam의 required의 기본값은 true 여서
적지 않으면 선언한 파라미터가 반드시 있어야 한다. 없으면 400 에러 발생.
그리고 위 예제에는 없지만 defaultValue 속성도 있는데 이
를 활용하면 값이 없을 경우 파라미터에 매핑될 기본 값을 세팅해 줄 수도 있다.
굳이 더 설명할 건.. 없는 거 같다 그럼 다음!
2. @PathVariable 활용
이 어노테이션을 활용하면
http://localhost:8080/reservation/api/reservations/2 와 같이 좀 더 깔끔한 URI를 만들 수 있다.
(뒤에 붙은 2가 파라미터!)
사용법은 간단하다
12345678910@RestController@RequestMapping(path = "/api")public class ReservationsApiController {// 예약 취소@PutMapping(path = "/reservations/{reservationId}")public Reservations cancleReservations(@PathVariable(name = "reservationId") Integer reservationInfoId) {return reservationService.cancelReservationById(reservationInfoId);}Mapping하는 Path에 (꼭 PutMapping 이어야 할 필요는 없습니다다. 써야 해서 쓴 거지 GetMapping이어도 됩니다~)
{}를 활용해 변수처럼 적어준 뒤 @PathVariable 어노테이션 뒤에 {} 안에 적은 변수 명을 name 속성의 값으로 넣는다.
그 후 이를 받을 자료형과 변수명을 옆에 선언해주면 잘 작동한다.
3 @RequestBody 활용
http요청의 body 부분을 java 객체로 받을 수 있게 해주는 어노테이션. 주로 json을 받을 때 활용한다.
뭔가 어려워 보이지만 어렵지 않다 예제를 보자.
예를 들어
{
"displayInfoId": 1,
"prices": [
{
"count": 5,
"productPriceId": 1,
"reservationInfoId": 0,
"reservationInfoPriceId": 0
},
{
"count": 3,
"productPriceId": 2,
"reservationInfoId": 0,
"reservationInfoPriceId": 0
}
],
"productId": 1,
"reservationEmail": "test@naver.com",
"reservationName": "API테스트",
"reservationTelephone": "010-1234-1234",
"reservationYearMonthDay": "2019.09.01"
}이런 json 데이터를 서버로 넘긴다고 하면
getter setter는 생략한다. 실제로는 구현해야 함 역시 getter setter 생략. 실제로는 구현해야 함 이렇게 json 데이터를 담은 java 객체를 구현하고
해당 요청을 매핑하는 컨트롤러 메소드에서
1234567891011@RestController@RequestMapping(path = "/api")public class ReservationsApiController {// 예약하기@PostMapping(path = "/reservations")public Reservations setReservations(@RequestBody ReservationParam reservationParam) {return reservationService.setReservation(reservationParam);}이렇게 @RequestBody 어노테이션을 선언하고 생성한 java 객체를 파라미터를 담을 변수로 적어주면
json 데이터로 날아온 파라미터가 고스란히 java객체에 담긴다. 매우 편리한 어노테이션!
참조
Ajax - @ResponseBody & @RequestBody
Ajax - @ResponseBody & @RequestBody 먼저 최근 개발하고 있는 방식은 대부분이 프론트엔드와 백엔드를 분리하여 개발을 하고 있다. 프론트엔드의 AJAX요청은 대부분 JSON으로 되어 있고, 이에 맞춰 백엔드에서도..
devyj.tistory.com
@PathVariable, @RequestParam [Spring]
01. @PathVariable 란? @RequestMapping 의 URL 에서의 ({})의 명시된 변수를 받아온다. @PathVariable을 이용하여 URI 템플릿 중에서 어떤 파라미터를 가져올지 결정할 수 있습니다. 라는 형식으로 view단에서..
mindols.tistory.com
반응형'Knowledge > Spring' 카테고리의 다른 글
스프링에서 파일다운로드 구현하는 방법 (0) 2019.09.20 스프링에서 컨트롤러로 넘어온 파일 저장하는 방법 (0) 2019.09.18 스프링에서 로그를 남겨보자! SLF4J와 Logback (0) 2019.09.18 로그인 기능은 어떻게 구현할까? 세션에 대해 알아보자 (0) 2019.09.04 Spring에서 JSON을 편하게 리턴해보자! Jackson 라이브러리와 RestController (0) 2019.08.21