이번에는 @RequestParam에 대해서 알아보자
@RequestParam은 request.getParameter(" ~ ");를
쉽게 표현한거라고 생각하면 이해하기 편할 것이다.
뷰쪽에서 데이터를 전달해주면
컨트롤러에서 원래는
ex) String data = request.getParameter(" ~ "); 이렇게
정보를 받는데
어노테이션을 이용시에는 간단하게
파라미터에 @RequestParam String data 를 이용해서 정보를 받을 수 있다
또한 숫자 같은 경우 @RequestParam int data 를 하면
바로 int 타입으로 형변환이 된다!
코드를 통해서 살펴보도록 하자.
// @RequestParam 을 사용해서 파라미터 받는곳에서 바로 받아서 사용
// Rest API 가 아니라면 이 방식을 많이 사용
// 대신 @RequestParam 사용하려면 보내는 정보의 이름과 밑에 data1 등 이름이 동일해야한다
@GetMapping("test5")
public String test5(@RequestParam int data1,
@RequestParam int data2,
@RequestParam int[] data3) {
System.out.println("data1 : "+data1);
System.out.println("data2 : "+data2);
for(int i : data3) {
System.out.println("data3 : "+i);
}
return "result";
}
//위의 @RequestParam 과 동일한데
// 이거는 파라미터의 이름을 동일하게 맞추지 않을때 사용
//사실 그냥 맞추고 위에것처럼 사용하는것을 더 선호함
@GetMapping("test6")
public String test6(@RequestParam(value="data1") int value1,
@RequestParam(value="data2") int value2,
@RequestParam(value="data3") int[] value3 ) {
System.out.println("data1 : "+value1);
System.out.println("data2 : "+value2);
for(int i : value3) {
System.out.println("data3 : "+i);
}
return "result";
}
//data1만 값이 있음 나머지는 없는경우
//data2는 없는경우 그냥 하면 에러가 뜸
//required = false 이면 에러가 안나고 null값이 들어가게 된다
@GetMapping("test7")
public String test7(@RequestParam int data1,
@RequestParam(required = false) String data2,//(required = false)가 있으면 값 없을때 에러가 안나고 null값이 들어감 그러므로 String이면 null이라 진행되는데 int는 null이 못들어가므로 오류가 다시뜸 헷갈림주의!!
@RequestParam(defaultValue = "555") int data3) { // defalutValue는 String으로 들어오고 값 없을때 말그대로 기본값을 설정해줌(null이 아닌 내가 지정한값)
System.out.println("data1 : "+data1); //그리고 int data3으로 한다면 String이 int로 형변환되어서 들어온다
System.out.println("data2 : "+data2); //data2는 없는경우
System.out.println("data3 : "+data3);
return "result";
}
컨트롤러의 소스를 가져왔다.
이제 뷰인 jsp를 살펴보자.
<a href='test5?data1=100&data2=200&data3=300&data3=400'>test5</a><br>
<hr>
<a href='test6?data1=100&data2=200&data3=300&data3=400'>test6</a><br>
<hr>
<a href='test7?data1=100'>test7</a><br> <!-- data1만 있는경우 -->
<hr>
밑에 html로 test5 6 7 로 정보를 보내면
위의 컨트롤러가 그것을 인식해주는 형태이다.
이때 보낸 정보를 @RequestParam 를 통해 인식한다.
이렇게 하면 콘솔 sysout 에는
정상적으로 출력되고 test7만
data1 : 100
data2 : null
data3 : 555
이렇게 출력이 된다.
data2는 없어도 되는 required = false 로 지정했기 때문에 없어도 인정을 하고 대신 null로 들어간다
주의할점은 null은 int안에는 못들어감으로 ex) @RequestParam(required = false) int data2 라고했으면
오류가 뜰것이다!! 꼭 String이나 null이 가능한 타입으로 받아라
data은 defaultValue = '555'라고 지정했으므로
null이어도 defaultValue가 들어가게 된다.
핵심은 @RequestParam 타입 이름
형태가 내가 보낸 뷰페이지에서 보낸 데이터의 이름과 동일해야 한다는 것이다.
그래야지만 @RequestParam가 정상적으로 읽어준다!!
주석을 잘 읽어보자
사실 test5인 가장 기본 형태를 많이 사용하는것 같다
그것을 위주로 잘 알아두자
@ModelAttribute(생략가능!!!) 예제 (@RequestParam의 진화형?!) 스프링 spring 파라미터 (0) | 2022.01.22 |
---|---|
스프링 @RequestParam Map과 @RequestParam List 등 RequsetParam에 대한 예시와 설명 (0) | 2022.01.22 |
스프링 Spring @PathVariable RestFul API (0) | 2022.01.20 |
스프링에서 입력값 추출하기 @RequestParam, request.getParameter (0) | 2022.01.20 |
Spring RequestMethod (Get, Post)방식 예제 @RequestMapping (0) | 2022.01.20 |
댓글 영역