-변수로 파라미터를 주입받을 경우 파라미터의 수가 많다면 비효율적이기 때문에 객체로 주입받아보자.
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 |
댓글