상세 컨텐츠

본문 제목

스프링 @RequestParam 사용법과 예제 spring

Spring

by shika 2022. 1. 20. 23:21

본문

이번에는 @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인 가장 기본 형태를 많이 사용하는것 같다

그것을 위주로 잘 알아두자

 

관련글 더보기

댓글 영역