웹페이지 제작을 위한 스프링공부
객체로 파라미터 주입받기
풀스택 개발자
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";
}