웹페이지 제작을 위한 스프링공부

객체로 파라미터 주입받기

풀스택 개발자 2020. 5. 2. 16:31

변수로 파라미터를 주입받는 경우 파라미터 데이터가 50개정도 날라올 경우 그 값들을 담을 변수들을 일일이 다 작성해주어야한다. 그럴경우 객체로 주입 받아주면된다

 

 

<%@ 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'>test1</a>
</body>
</html>

 

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

 

출력값

data1:100
data2:200

 

단 이때 동일한 이름으로 전달되는 파라미터가 2개이상이면 첫번째값만 들어감

 

<%@ 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</a> ->data3에 300,400 두개의값이 들어감
</body>
</html>

 

@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:"+data1);
		System.out.println("data2:"+data2);
		System.out.println("data3:"+data3);
		
		
		return "result";
	}

 

출력값

data1:100
data2:200
data3:300 <- 400은 들어가지않음 

 

이러한 경우 List를 사용하면 둘다 데이터를 받을 수 있다.

 

@GetMapping("/test1")
	public String test1(@RequestParam Map<String,String> map,@RequestParam List<String> data3)//data3참조 변수에 300과 400값이 list형식으로 차곡차곡 쌓임 또한 넘어오는 데이터 타입에 따라 타입변환을 해주면됨
	{
		String data1=map.get("data1");
		String data2=map.get("data2");
		
		System.out.println("data1:"+data1);
		System.out.println("data2:"+data2);
		
		//data3참조변수는 리스트로 만들어진 변수이다 data3에 값이 순서대로 잘 들어갔는지 확인을 해보았다.
		System.out.println(data3.get(0));
		System.out.println(data3.get(1));
		
		   
	      for(String str:data3) {
	         System.out.println("data3:"+str);
	      }
	      

		
		
		return "result";
	}

 

출력값

data1:100
data2:200
300
400
data3:300
data3:400

 

제대로 출력되었다.

 

*키워드*

파라미터

HTML의 form 데이터 전송시 key/value 쌍으로 사용된다
입력값을 저정하는 변수

 

프로퍼티

클래스의 내부 변수

 

 

ModelAttribute

 

 

반드시 파라미터 이름과 beans의 set 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&data3=400'>test1</a>
</body>
</html>

 

package kr.co.softcampus.beans;

public class DataBean {
	//data1이라는 이름으로 파라미터 데이터가 넘어오면 setData1을 호출하여 주입시켜줌,data2,data3동일한 방식
	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;
	}
	
}

data1,data2,data3 파라미터와 클래스의 프로터티 값이 동일한것을 볼 수 있음 다르면 절대 안됩니다~!

 

@GetMapping("/test1")
	public String test1(@ModelAttribute DataBean bean1)//넘어온 파라미터 데이터가 bean1로 자동으로 주입됨
	{
		System.out.println("data1:"+bean1.getData1());
		System.out.println("data1:"+bean1.getData2());
		
		for(int number1:bean1.getData3())
		{
			System.out.println("data3:"+number1);
		}
		return "result";
	}

 

 

출력값

data1:100
data1:200
data3:300
data3:400

 

 

자동 주입 과정

@GetMapping("/test1")
	public String test1(@ModelAttribute DataBean bean1)//넘어온 파라미터 데이터가 bean1로 자동으로 주입됨
	{
		bean1.setData1(100);//이러한 작업을 자동으로 해준다는 소리
		bean1.setData2(200);//이러한 작업을 자동으로 해준다는 소리
		
		return "result";
	}