본문 바로가기
Spring/Spring MVC 5

파라미터에 객체를 주입받기

코동이 2020. 5. 25.

이전에 (@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