이전에 (@RequestParam int data1), (@RequestParam int data2), (@RequestParam String name1)등
직접적, 구체적으로 파라미터를 추출했다. 그런데 파라미터의 양이 많아진다면?
Map을 사용해서 내용을 추출한다.
<index.jsp>
<a href="test1?data1=100&data2=200&data3=300&data3=400">test</a>
=======================================================================
<TestController.java>
@GeMapping("/test1")
public String test(@RequestParam Map<String,String> map, List<String> data3){
System.out.println(map.get("data1"));
System.out.println(map.get("data2"));
//data3에 대한 값은 어떻게 출력될까?
System.out.println(map.get("data3"));
for(String str : data3){
System.out.println(str);
}
return "result";
}
(@RequestParam String data1) -> (@RequestParam Map<String,String> map) 으로 변경한다.
data1, data2 는 1개밖에 없기 떄문에 상관없지만
Q> data3는 2개가 정의되어 있는데 어떻게 주입이 될까?
1. data3=300
2. datae=400
A> data3=300
먼저 등록된 data3=300의 값이 주입된다. 따라서 이 값을 Map이 아닌 List를 통해 파라미터로 받는다.
List<String> data3이기 때문에 매개변수로 넣을려면 List 혹은 그를 상속받는 Collection들이 필요하다.
Bean을 만들어서 주입 받을 수도 있다.
<index.jsp>
<a href="test1?data1=100&data2=200&data3=300&data3=400">test</a>
=======================================================================
<DataBean.class>
public class DataBean {
private int data1;
private int data2;
private int[] data3;
public int getData1() {
return data1;
}
public void setData1(int data1) {
this.data1 = data1;
}
public int getData2() {
return data2;
}
public void setData2(int data2) {
this.data2 = data2;
}
public int[] getData3() {
return data3;
}
public void setData3(int[] data3) {
this.data3 = data3;
}
}
=======================================================================
<TestController.java>
@GeMapping("/test1")
public String test(@ModelAttribute DataBean bean1){
System.out.println(bean1.getData1());
System.out.println(bean1.getData2());
//data3에 대한 값은 어떻게 출력될까?
for(int number : bean1.getData3()){
System.out.println(number);
}
return "result";
}
DataBean클래스를 만들어 파라미터로 넘기는 data1,data2,data3에 대하여 변수를 만든다.
@RequestParam으로 해당 파라미터를 직접 받지 않고, @ModelAttribute로 DataBean 클래스를 참조해서
get메서드를 통해서 원하는 파라미터를 받는다. 즉, 객체를 파라미터로 주입받는다.
data3는 여러개를 받기 때문에 int[] 배열형으로 선언한다. 참고로 @ModelAtribute를 쓰지 않아도 가능하다.
그렇다면, 자료형이 아닌 class인 DataBean을 넣으면 자동으로 해당 클래스를 확인해 객체를 이용할 수 있다.
즉, 객체를 주입받을 수 있다.
'Spring > Spring MVC 5' 카테고리의 다른 글
커맨드 객체 (0) | 2020.05.25 |
---|---|
ViewResolver (0) | 2020.05.25 |
파라미터 추출하기 (0) | 2020.05.25 |
URL Mapping (0) | 2020.05.24 |
프로젝트설정(not Xml, but Java) (0) | 2020.05.24 |