SPRING

[SPRING] 객체로 파라미터 주입 받기

예나부기 2021. 7. 19.

-변수로 파라미터를 주입받을 경우 파라미터의 수가 많다면 비효율적이기 때문에 객체로 주입받아보자.

 

Map으로 주입받기

  • 클라이언트가 전달하는 모든 파라미터 데이터를 한번에 Map으로 받을 수 있음
  • 단, 동일 명으로 전달되는 2개 이상의 파라미터는 한 개만 담기게 된다.
  • 동일 명으로 전달되는 파라미터가 2개 이상이라면, List로 주입 받아야한다.

예제

1.index.jsp 생성하기

<%@ 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&data3=400'>test1 get</a><br/>
	<hr/>
	<a href='test2?data1=100&data2=200&data3=300&data3=400'>test2 get</a><br/>
</body>
</html>

2.Controller 생성하기

@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.printf("data1 : %s\n", data1);
		System.out.printf("data2 : %s\n", data2);
		System.out.printf("data33 : %s\n", data33);
		
		for(String str : data3) {
			System.out.printf("str : %s\n", str);
		}
		
		return "result";
	}
	
}

 

public String test1(@RequestParam Map<String, String> map){

     String data1 = map.get("data1");

}

 

public String test1(@RequestParam List<String> data3){

     String data1 = map.get("data1");

}

-실행 결과, inext.jsp에서 data3 이란 이름으로 보낸 두 개의 값은 한 개만 남고 사라진다. (data3 = 300만 살아남음)

-따라서 List<String> data3으로 저장해준다.

-Map이나 List로 주입받을 때는 무조건 String으로 받아서, 따로 변환을 해야 한다.

-따라서 Bean을 사용하는 것이 편리할 수도

 

@ModelAttribute

  • ModelAttribute 어노테이션을 사용하면 파라미터를 객체로 주입받을 수 있음
  • 전달되는 파라미터의 이름과 동일한 프로퍼티에 자동으로 주입
  • 어노테이션은 생략 가능
  • 이러한 객체를 커맨드 객체라고 부른다.

예제

1.index.jsp 생성하기

<%@ 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='test2?data1=100&data2=200&data3=300&data3=400'>test2 get</a><br/>
    
</body>
</html>

2.Beans 패키지 생성하기, DataBean 생성하기

New Package > kr.yena.beans > New Class > DataBean

-주의할 점! 파라미터의 이름과 변수 이름이 동일해야 한다.

-data1이라는 파라미터가 넘어오면 setData1이라는 Setter매소드를 통해 주입

-data2라는 파라미터가 넘어오면 setData2이라는 Setter매소드를 통해 주입

-만약 이름이 data1, data2, data3가 아닌 파라미터가 넘어온다면 ? 자동으로 주입되지 않는다. 따로 변수 정의해야함

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;
	}
	
	
}

3.test2 요청을 받아들일 수 있는 매서드를 Controller에 생성

@Controller
public class TestController {
	

	
	@GetMapping("/test2")
	// public String test2(@ModelAttribute DataBean bean1) {
	public String test2(DataBean bean1) { //≪
		
		System.out.printf("data1 : %d\n", bean1.getData1());
        System.out.printf("data1 : %d\n", bean1.getData2());

		for(int number1 : bean1.getData3()) {
			System.out.printf("data3 : %d\n", number1);
		}
		
		return "result";
	}
}

-ModelAttribute는 생략 가능!

'SPRING' 카테고리의 다른 글

[SPRING] 커맨드 객체  (0) 2021.07.20
[SPRING] View Resolver 뷰리졸버  (0) 2021.07.19
[SPRING] 파라미터 추출하기  (0) 2021.07.19
[SPRING] 요청 방식  (0) 2021.07.19
[SPRING] URL MAPPING  (0) 2021.07.19

댓글