초급의 끄적거림

[어노테이션] @RequestMapping / @RequestParam 본문

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]
  1. method1() :: 이 메소드에서 선언은 id 요청 파라미터를 int 타입으로 변환해서 메소드의 id 파라미터에 넣어줌
  2. method2() :: @RequestParam은 이상의 파라미터에 적용할 수 있음, 스프링의 내장 변환기가 다룰수 있는 모든 타입을 지원함
  3. method3() :: @RequestParam에 파라미터 이름을 지정하지 않고 Map<String, String> 으로 선언하여 파라미터를 담은 맵으로 받을 수 있고, 이 때 파라미터의 이름은 맵의 키에, 값은 맵의 값에 담겨 전달
  4. method4() :: @RequestParam을 사용했다면 해당 파라미터가 반드시 있어야 하지만 선택적으로 하고싶다면 required 엘리먼트를 false로 설정. 요청 파라미터가 존재하지 않을 때의 default값도 설정할 수 있다. 해당 메소드는 required와 defaultValue 엘리먼트를 설정한 예
  5. method5() :: 메소드 파라미터의 이름과 요청 파라미터의 이름이 일치하기 때문에@RequestParam의 이름 엘리먼트를 생략한 예
  6. 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);
}

 

Comments