[STS] Parameter 수집

안아현·2024년 8월 13일

Spring

목록 보기
2/13

파라미터 수집

  1. @RequestMapping
    @RequestMapping은 Http 요청 매핑에 사용되는 기본적인 어노테이션이다. 클래스와 메서드 모두에서 사용할 수 있는데, 다음 속성을 이용하여 제어한다.

  2. 속성

  • value: 요청 URL 경로를 지정한다. value="url경로"의 형식이지만, [ value= ]는 생략 가능하다.
  • method: 전달 받는 Http 메서드를 지정한다. method=RequestMethod.GET or RequestMethod.POST의 형식을 따른다.
    -> 이외에도 params, headers 등 여러 속성이 있지만 이 정도만 알아도 파라미터 수집이 가능하다.
  1. 사용방법
  • uri: localhost/board/view.do?no=124&id=velog 라고 가정하자

**예시

  @Controller
  @RequestMapping("/board")
  @Log4j
  public class SampleController{
  
  	@RequestMapping("/view.do", method=RequestMethod.GET)
  	public void ex01(Long no, String id){
  		log.info("글 번호: "+no);
    	log.info("ID: "+id);
  	}
  }

메서드 파라미터 변수명을 uri 파라미터와 동일하게 두면 자동으로 Mapping이 된다. 이 경우, 콘솔에 다음과 같은 log가 찍힐 것이다.

INFO: ... 글 번호: 124
INFO: ... 글 번호: velog



@RequestParam

  1. 개념
    앞에서 설명한 바와 같이 메서드 파라미터의 변수명와 uri 파라미터가 같으면 자동 매핑이 되지만, 모종의 이유로 메서드 파라미터와 uri 파라미터가 같지 않을 수도 있다. 이럴 때 사용하는 것이 RequestParam이다. @RequestParam은 uri 파라미터와 메서드의 매개변수를 바인딩하는 어노테이션이다.

  2. 사용법

  • 메서드 매개변수 != uri 파라미터
//uri: localhost/board/view.do?no=124&id=velog

public class SampleController{
  
  	@RequestMapping("/view.do", method=RequestMethod.GET)
  	public void ex01(@RequestParam("no") Long num, String id){
  		log.info("글 번호: "+num);
    	log.info("ID: "+id);
  	}
  }

위 코드와 같이 @RequestParam(//uri파라미터)를 이용하면 메서드의 매개변수의 변수명과 uri의 파라미터명이 서로 달라도 매핑이 가능하다.

  • 기본값 설정
//uri: localhost/board/view.do?no=124&id=velog

public class SampleController{
  
  	@RequestMapping("/view.do", method=RequestMethod.GET)
  	public void ex01(@RequestParam(defulatValue="1") Long no, String id){
  		log.info("글 번호: "+num);
    	log.info("ID: "+id);
  	}
  }

uri로 반드시 파라미터 값을 전달해야 하는 경우, 파라미터 누락을 고려하여 기본값을 지정할 수 있다. 위 코드는 no의 기본값을 1로 설정하고 있다.



배열 파라미터 수집

  1. 개요
    uri가 다음과 같다고 가정하자.

    localhost/board/write.do?tel=010&tel=1234&tel=5678

    파라미터명이 여러 번 사용되면 Controller는 배열형태로 파라미터를 수집해야 한다. 배열 파라미터를 수집하는 방법은 크게 두 가지로 나뉜다.
  2. List

public class SampleController{
  
  	@RequestMapping("/write.do", method=RequestMethod.GET)
  	public void write(@RequestParam("tel") ArrayList<String> tel){
  		log.info("tel: "+tel);
  	}
  }

ArrayList는 @RequestParam으로 uri 파라미터와 메서드의 매개변수를 바인딩해야 한다. 이 코드의 실행 결과는 다음과 같다.

INFO: ... tel: [010, 1234, 5678]

  1. 배열
public class SampleController{
  
  	@RequestMapping("/write.do", method=RequestMethod.GET)
  	public void write(String[] tel){
  		log.info("tel: "+Array.toString(tel));
  	}
  }

배열은 별도의 바인딩이 필요없다. 이 코드를 실행한 결과는 ArrayList의 결과와 동일하다.

INFO: ... tel: [010, 1234, 5678]

profile
programming

0개의 댓글