Spring MVC - 객체를 통한 파라미터 주입
2020. 9. 6. 20:56ㆍJava/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 |