🌿파라미터 가져오기
①
// http://localhost/temp?a=hello&b=123
@GetMapping("/temp") // GET
public String temp(String a, int b) {
System.out.println("a=" + a); //a=hello
System.out.println("b=" + (b + 3)); //b=126
return "none"; // none.jsp 없음 404
}
넘어오는 파라미터 이름과 동일하기 때문에 @RequestParam이나 request.getParameter이 필요하지 않다.
@GetMapping("/temp") : GET 방식
@RequestMapping("/temp") : GET, POST 둘 다 받아 들일 수 있음.
@RequestMapping(value="/temp", method=RequestMethod.GET) : GET방식
// http://localhost/temp1?a=hello&b=123
@RequestMapping("temp1")
public String temp1(HttpServletRequest request, HttpServletResponse response) {
String in_a = request.getParameter("a");
String in_b = request.getParameter("b");
String a = in_a;
int b = Integer.parseInt(in_b) + 4;
System.out.println("a=" + a); //a=hello
System.out.println("b=" + b); //b=127
return "none";
}
넘어오는 파라미터 이름과 동일하지 않기 때문에 @RequestParam이 필요하다.
②
// http://localhost/temp2?a=hello&b=123
@RequestMapping("/temp2")
public String temp2(@RequestParam Map<String, String> map) {
System.out.println("map:" + map); //map:{a=hello, b=123}
String a = map.get("a");
int b = Integer.parseInt(map.get("b"));
System.out.println("a:" + a); //a:hello
System.out.println("b=" + (b + 5)); //b=128
return "none";
}
Map파라미터를 불러오기위해선 @RequestParam이 필수이다.
③
// http://localhost/temp3?a=hello&b=123
@RequestMapping("/temp3")
public String temp3(
@RequestParam("a") String v1,
@RequestParam("b") int v2)
{
System.out.println("v1=" + v1); //v1=hello
System.out.println("v2=" + (v2 + 7)); //v2=130
return "none";
}
넘어오는 parameter a를 문자열 변수 v1으로 지정한다.
∴비밀번호 파라미터가 넘어올때 변수로 바꿔서 비밀번호처럼 안보이게 할수 있음.
④
// http://localhost/temp4?a=hello&b=123
@RequestMapping("/temp4")
public String temp4(DataVo vo) {
System.out.println("a:" + vo.getA()); //a:hello
System.out.println("b=" + (vo.getB() + 10)); //b=133
return "none";
}
아래의 DataVo Class 에서 a와 b를 묶어서 하나의 클래스로 만들어서 위의 메소드에서 객체로 매핑한다.
public class DataVo {
String a;
int b;
public String getA() {
return a;
}
public int getB() {
return b;
}
}
🌿파라미터 넘겨주기
참고: [java] 클래스 활용
①
@RequestMapping("/temp5")
public String temp5(String a, int b, Model model) {
System.out.println("a=" + a);
System.out.println("b=" + (b + 32));
model.addAttribute("a", a);
model.addAttribute("b", b);
model.addAttribute("c", "이것도 넘어가나?");
return "reqdata"; // reqdata.jsp
}
- Model: reqdata.jsp 에게 넘겨줄 값을 담는 객체
- model.addAttribute: 넘겨줄 값을 Model 에 담는다
👉 a,b는 inparameter(함수가 호출될 때, 이 매개변수의 값이 함수 내부에서 사용됨)
👉 model은 outParameter(함수가 실행된 후, 이 매개변수의 값이 함수 외부로 전달됨.)
②
// /temp6?a=hello&b=123
@RequestMapping("/temp6")
public String temp6(DataVo vo, Model model ) {
System.out.println("a="+vo.getA());
System.out.println("b="+(vo.getB()+100));
model.addAttribute("a", vo.getA());
model.addAttribute("b", vo.getB());
model.addAttribute("c", "이것도 넘어간다.");
return "reqdata";
}
DataVo vo : 넘겨받는 정보(객체)
③
// /temp7?a=hello&b=123
@RequestMapping("/temp7")
public String temp7(
@ModelAttribute("attrName") DataVo vo,
Model model ) {
System.out.println("a="+vo.getA());
System.out.println("b="+(vo.getB()+100));
model.addAttribute("a", vo.getA());
model.addAttribute("b", vo.getB());
return "noneModel";
}
@ModelAttribute("attrName") DataVo vo : attrName속성으로 DataVo를 사용하게 해준다.
∴ inputParameter임과 동시에 Model객체 역할을 한다.
<body>
<h2>넘어온 data(model)</h2>
${ a } == model.getAttribute("a")
${ vo.a } == vo.getA()
<p>a : ${ a }</p>
<p>b : ${ b }</p>
<br>
<p>a : ${ vo.a }</p>
<p>b : ${ vo.b }</p>
<br>
<p>a : ${ attrName.a }</p>
<p>b : ${ attrName.b }</p>
<br>
<p>a : ${ param.a }(request.getParameter("a"))</p>
<p>b : ${ param.b }(request.getParameter("a"))
<!-- ∴Controller와 jsp는 requestScope를 공유한다 -->
</p>
<br>
</body>
Controller에서 넘겨주는 값은 noneModel.jsp에도 request값이 공유된다.
🌿파라미터를 경로처럼 사용하기
①
// /temp8/hello/123
@RequestMapping("/temp8/{a}/{b}") //주소 전달 방식
public String temp8(@PathVariable("a") String a, @PathVariable("b") int b) {
System.out.println("a:" + a);
System.out.println("b=" + b);
return "none";
}
변수끼리는 @PathVariable를 생략시 에러가 발생한다.
②
// /temp9/hello/123
@RequestMapping("/temp9/{a}/{b}") //주소 전달 방식
public String temp9(DataVo vo) {
System.out.println("a:" + vo.getA());
System.out.println("b=" + vo.getB());
return "none";
}
클래스객체의 경우 @PathVariable를 생략해도 된다.
③
// /temp10/hello/123
@RequestMapping("/temp10/{a}/{b}")
public String temp10(@ModelAttribute("vo") DataVo vo, Model model) {
System.out.println("a:" + vo.getA());
System.out.println("b=" + vo.getB());
return "noneModel";
}
PathVariable: 주소자체에 데이터를 넣는 것이므로 payload로 안들어가고 request.getParameter가 실행되지 않는다.
'SPRING' 카테고리의 다른 글
[spring]회원정보 수정 - 비밀번호 체크하기 (0) | 2024.10.13 |
---|---|
[spring] 회원가입 - 아이디 중복 체크하기 (0) | 2024.10.13 |
[spring]스프링 부트 MVC구조 (3) | 2024.10.08 |
[spring] 스프링 부트 Controller (0) | 2024.10.08 |
[spring] Spring Framework에서의 datasource 설정 및 Spring Boot migration (2) | 2024.10.04 |