목차
@RequestParam
@RequestParam 어노테이션을 이용하면 Servlet 요청 파라미터(ex. 쿼리 파라미터, form 데이터)를 컨트롤러 메소드의 인자로 바인딩할 수 있습니다. 스프링 프레임워크를 사용할 때 가장 편리한 기능 중 하나가 파라미터를 자동으로 수집하는 것입니다. 매번 request.getParameter로 데이터를 파싱하던 노동에서 벗어날 수 있게 됩니다.
@RequestParam(name = "name")
파라미터 name을 지정하여 파라미터로 전달된 데이터들 중 지정한 이름의 데이터를 파싱합니다. 매개변수로 지정한 변수의 타입이 String이 아닌 경우 자동으로 형변환이 이루어집니다.
@RequestMapping(value = "/login1")
public String login1(@RequestParam(name = "userid") String id, @RequestParam("passwd") String pw) {
return "userid: "+id+", passwd: "+pw;
}
http://localhost:8092/testmapping/login1?userid=aaa&passwd=1234
----
userid: aaa, passwd: 1234
@RequestParam
파라미터로 전달되는 name과 매개변수의 이름을 일치시키면 name 속성을 지정하지 않아도 자동으로 데이터를 파싱해서 동일한 이름의 변수에 저장합니다.
@RequestMapping(value = "/login2")
public String login2(@RequestParam String userid, @RequestParam String passwd) {
return "userid: "+userid+", passwd: "+passwd;
}
http://localhost:8092/testmapping/login2?userid=aaa&passwd=1234
----
userid: aaa, passwd: 1234
@RequestParam 생략
위의 예제와 같이 파라미터로 전달되는 name과 매개변수의 이름이 일치하면 @RequestParam을 적어주지 않아도 자동으로 데이터를 파싱해서 동일한 이름의 변수에 저장합니다.
@RequestMapping(value = "/login3")
public String login3(String userid, String passwd) {
return "userid: "+userid+", passwd: "+passwd;
}
http://localhost:8092/testmapping/login3?userid=aaa&passwd=1234
----
userid: aaa, passwd: 1234
@RequestParam 속성
required 속성 - 필수 파라미터 해제
@RequestParam을 명시한 메소드 파라미터는 기본적으로 필수 파라미터가 되어 해당 이름으로 넘어오는 파라미터가 존재하지 않는 경우 예외가 발생합니다.
http://localhost:8092/testmapping/login2?userid=aaa
이 경우 다음과 같이 required 속성으로 false를 지정해 주면 해당 파라미터를 필수가 아닌 옵션이 되도록 설정 가능합니다.
@RequestMapping(value = "/login4")
public String login4(@RequestParam String userid, @RequestParam(required = false) String passwd) {
return "userid: "+userid+", passwd: "+passwd;
}
http://localhost:8092/testmapping/login4?userid=aaa
----
userid: aaa, passwd: null
defaultValue 속성 - 디폴트 값 설정
defaultValue 속성을 지정하여 해당 파라미터에 대한 디폴트 값을 설정할 수 있습니다. 이 경우 해당 파라미터를 반드시 전달하지 않아도 디폴트 값으로 설정되기 때문에, 실제로 required = false 로 설정하는 것과 같습니다.
@RequestMapping(value = "/login5")
public String login5(@RequestParam String userid, @RequestParam(defaultValue = "0000") String passwd) {
return "userid: "+userid+", passwd: "+passwd;
}
http://localhost:8092/testmapping/login5?userid=aaa
----
userid: aaa, passwd: 0000
여러 파라미터 매핑하기
List, 배열 - 다중 값 매핑하기
동일한 파라미터 name으로 여러 데이터가 전달되는 경우 List나 배열 등으로 매핑할 수 있습니다.
@RequestMapping(value = "/login6")
public String login6(@RequestParam List<String> ids) {
return "ids: "+ids;
}
http://localhost:8092/testmapping/login6?ids=1,2,3
----
ids: [1, 2, 3]
@RequestMapping(value = "/login7")
public String login7(@RequestParam String[] ids) {
String str = "";
for (String id : ids) {
str += id+" ";
}
return "ids: "+str;
}
http://localhost:8092/testmapping/login7?ids=1&ids=2&ids=3
----
ids: 1 2 3
Map - 모든 파라미터 매핑하기
파라미터 name이나 개수에 대한 정의 없이 Map으로 모든 파라미터를 매핑할 수 있습니다. key는 파라미터 name으로, 해당 파라미터 value는 value로 저장됩니다.
@RequestMapping(value = "/login8")
public String login8(@RequestParam Map<String, String> allParams) {
return "allParams: "+allParams;
}
http://localhost:8092/testmapping/login8?userid=aaa&passwd=1234&age=10
----
allParams: {userid=aaa, passwd=1234, age=10}
참고
https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-requestparam
https://www.baeldung.com/spring-request-param
'Spring' 카테고리의 다른 글
[Spring] 컨트롤러의 리턴 타입 (0) | 2022.09.04 |
---|---|
[Spring] Model, ModelAndView, @ModelAttribute - 컨트롤러에서 뷰로 데이터 전송하기 (0) | 2022.09.03 |
[Spring] @RequestMapping - 요청 주소 매핑하기 (0) | 2022.09.01 |
[Spring] 스프링 MVC의 기본 구조 (0) | 2022.08.31 |
[Spring] @Transactional 기본 사용법 (0) | 2022.08.27 |
댓글