Spring MVC - 객체를 통한 파라미터 주입

2020. 9. 6. 20:56Java/Spring

반응형

넘어오는 변수가 많을경우 객체를 통해서 주입이 가능하다. jsp에서 사용한 bean 주입이 사용된다.

 

 

아래와 같은 jsp 파일이 있을 경우 test1에 넘어오는 get 요청을 객체를 통해 받는 방법들을 알아보자.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="test1?data1=100&data2=200&data3=300">test1</a>
</body>
</html>

 

1.Map을 통한 주입

 

- 클라이언트가 전달 하는 모든 파라미터 데이터를 한번에 Map으로 받을 수 있습니다.

- 단 동일 명으로 전달되는 2개 이상의 파라미터는 하나만 담기게 됩니다.

- 동일 명으로 전달되는 파라미터가 2개 이상이라면 List로 주입 받아야 합니다.

@Controller
public class TestController {
	@GetMapping("/test1")
	public String test1(@RequestParam Map<String,String> map) {
		String data1 = map.get("data1");
		String data2 = map.get("data2");
		String data3 = map.get("data3");
		System.out.println(data1);
		System.out.println(data2);
		System.out.println(data3);
		return "result";
	}
}

위처럼 @RequestParam의 값으로 Map을 주면 자동으로 넘어온 변수들이 주입이된다.

<a href="test1?data1=100&data2=200&data3=300&data3=400">test1</a>

만약 위와 같이 data3에 두 가지 값이 온다면 첫 값만 출력되는데 이럴 경우는 List로 값을 받아야 한다.

@Controller
public class TestController {
	@GetMapping("/test1")
	public String test1(@RequestParam Map<String,String> map,@RequestParam List<String> data3) {
		String data1 = map.get("data1");
		String data2 = map.get("data2");
		String data33 = map.get("data3");
		System.out.println(data1);
		System.out.println(data2);
		System.out.println(data33);
		
		for(String d:data3) {
			System.out.println(d);
		}
		return "result";
	}
}

 

 


2.@ModelAttribute

- ModelAttribute 어노테이션을 사용하면 파라미터를 객체로 주입받을 수 있습니다.

- 전달되는 파라미터의 이름과 동일한 프로퍼티에 자동으로 주입됩니다.

- 어노테이션은 생략이 가능합니다.

- 이러한 객체를 커맨드 객체(Command Object)라고 부릅니다.

 

이 주입은 우리가 jsp에서 자주사용했던 bean객체 주입이 사용된다.

 

먼저 넘겨받는 변수들과 이름이 같은 변수들을 갖는 빈 객체를 만들고 setter,getter를 만든다.

public class DataBean {
	String data1;
	String data2;
	String [] data3;
	public String getData1() {
		return data1;
	}
	public void setData1(String data1) {
		this.data1 = data1;
	}
	public String getData2() {
		return data2;
	}
	public void setData2(String data2) {
		this.data2 = data2;
	}
	public String[] getData3() {
		return data3;
	}
	public void setData3(String[] data3) {
		this.data3 = data3;
	}

}

아래와 같이 작성하면 값들이 DataBean 객체에 자동으로 주입된다.

 

@GetMapping("/test2")
public String test2(@ModelAttribute DataBean bean) {
		
	String data1 = bean.getData1();
	String data2 = bean.getData2();
	String []data3 = bean.getData3();
	System.out.println(data1);
	System.out.println(data2);
	for(String d:data3) {
		System.out.println(d);
	}
	return "result";
}

위 메소드에서 @ModelAttribute 어노테이션은 생략 가능하다.

 

반응형

'Java > Spring' 카테고리의 다른 글

Spring MVC - 커맨드 객체(Bean 객체를 통한 전달)  (0) 2020.09.08
Spring MVC - ViewResolver  (0) 2020.09.08
Spring MVC - 파라미터 추출  (0) 2020.09.06
Spring MVC - 요청방식(Get,Post)  (0) 2020.09.05
Spring MVC - URL Mapping  (0) 2020.09.05