Framework/Spring
[어노테이션] @RequestMapping / @RequestParam
codingD
2020. 7. 3. 16:45
@RequestMapping
- 처리할 요청 URL을 지정한다
- 실제 요청 URL은 class의 @RequestMapping값과 메서드의 @RequestMapping값의 조합으로 지정됨
@RequestMapping(value="/article/form",method="RequestMethod.GET")
@RequestMapping(value="/article/write",method="RequestMethod.POST")
@RequestParam
- 단일 HTTP 요청 파라미터의 값을 메소드 파라미터에 넣어주는 어노테이션
- 가져올 요청 파라미터의 이름을 @RequestParam 어노테애션의 기본 값으로 지정해주면 됨
- 요청 파라미터의 값은 메소드 파라미터의 타입에 따라 적절히 변환 됨
- 해당 파라미터가 반드시 존재해야하며, 없으면 HTTP 400 - Bad Request 발생
- 파라미터를 필수가 아니라 선택적으로 제공하게 하려면 required 엘리먼트를 false로 설정할 것
public String method1(@RequestParam("id") int id) { ... }
public String method2(@RequestParam("id") int id,
@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) { ... }
public String method3(@RequestParam Map<String, String> params) { ... }
public String method4(
@RequestParam(value="id", required=false, defaultValue="-1") int id) { ... }
public String method5(@RequestParam int id) { ... }
출처: https://springsource.tistory.com/13 [Rednics Blog]
- method1() :: 이 메소드에서 선언은 id 요청 파라미터를 int 타입으로 변환해서 메소드의 id 파라미터에 넣어줌
- method2() :: @RequestParam은 이상의 파라미터에 적용할 수 있음, 스프링의 내장 변환기가 다룰수 있는 모든 타입을 지원함
- method3() :: @RequestParam에 파라미터 이름을 지정하지 않고 Map<String, String> 으로 선언하여 파라미터를 담은 맵으로 받을 수 있고, 이 때 파라미터의 이름은 맵의 키에, 값은 맵의 값에 담겨 전달
- method4() :: @RequestParam을 사용했다면 해당 파라미터가 반드시 있어야 하지만 선택적으로 하고싶다면 required 엘리먼트를 false로 설정. 요청 파라미터가 존재하지 않을 때의 default값도 설정할 수 있다. 해당 메소드는 required와 defaultValue 엘리먼트를 설정한 예
- method5() :: 메소드 파라미터의 이름과 요청 파라미터의 이름이 일치하기 때문에@RequestParam의 이름 엘리먼트를 생략한 예
- String, int 와 같은 단순 타입인 경우에는 @RequestParam을 아예 생략할 수도 있는데 이 때는 메소드 파라미터와 같은 이름의 요청 파라미터 값을 받음. 하지만 파라미터의 개수가 많고 종류가 다양해지면 코드를 이해하는데 불편할 수 있기 때문에 명시적으로 @RequestParam을 부여해주는 것을 권장한다.
@RequestParam을 이용하여 form 데이터를 Controller로 받기
- Controller에서 @RequestParam 어노테이션을 이용하면 Http 요청의 데이터를 메소드 파라미터로 받을 수 있음.
- jsp의 html 태그에 name으로 지정한 값으로 매칭되는 방식
- 이 외의 파라미터 맵핑 방식 :: @RequestHeader, @RequestBody 등
예시
- input 태그의 name속성을 payment_participant_list로 지정하고 Controller에서 값을 넘겨받을 파라미터를 @RequestParam 어노테이션으로 지정해줘서 사용하는 방법
<form class="modal-content" th:action="@{'/meetings/' + ${meeting.id} + '/payment'}" method="post">
...
<input th:each="participant : ${payment_participant_list}" type="checkbox" name="payment_participant_list" th:value="${participant.ssoId}" th:text="${participant.name}" checked="checked"/>
@PostMapping(value = "/{id}/payment/{paymentId}/update")
public String updatePayment(@PathVariable int id,@PathVariable int paymentId, Payment payment, User payer, @RequestParam List<User> payment_participant_list) {
System.out.println(payment_participant_list);
}