SPRING

[SPRING] 파라미터 추출하기

예나부기 2021. 7. 19.
  • 클라이언트 요청 발생 시 전달하는 파라미터 데이터를 손쉽게 주입받을 수 있도록 다양한 방식을 제공하고 있음
  • Spring MVC는 Servlet/JSP처럼 요청 방식에 따라 파라미터 추출하는 방식이 달라지지 않음(코드 동일)

HttpServletRequest사용하기

  • SpringMVC는 필요한 객체나 데이터를 주입 받아 사용
  • Servlet/JSP에서 파라미터 데이터를 추출할 때 HttpServletRequest객체를 통하게 되는데,
  • Spring MVC에서 이 객체를 주입 받아 사용할 수 있음
  • 파라미터 추출 뿐 아니라 HttpServletRequest객체가 필요한 경우 사용하면 됨

예제

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/>
	<form action='test2' method='post'>
		data1 : <input type='text' name='data1'/><br/>
		data2 : <input type='text' name='data2'/><br/>
		data3 : <input type='checkbox' name='data3' value='100'/>data3 100
		        <input type='checkbox' name='data3' value='200'/>data3 200<br/>
		<button type='submit'>test2 post</button>
	</form>
	
</body>
</html>

2-1. TestController 생성 (Get방식일 때)

@Controller
public class TestController {

	@GetMapping("/test1") //≪
	public String test1(HttpServletRequest request) { //≪
		
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		String [] data3 = request.getParameterValues("data3");
		
		System.out.println("data1 : " + data1);
		System.out.println("data2 : " + data2);
		
		for(String str1 : data3) {
			System.out.println("data3 : " + str1);
		}
		
		return "result";
	}

 

-Servlet/JSP에서 어떠한 요청이 발생하면, 해당 요청에 관련된 정보는 전부 HttpServletRequest에 담긴다.

-이 HttpServletRequest객체를 통해 파라미터를 추출한다.

-request.getParameterValues(); : 위의 jsp에서 파라미터를 data3이라는 이름으로 파라미터를 여러개 보냄

-<a href='test1?data1=100&data2=200&data3=300&data3=400'>test1 get</a>

2-2. TestController 생성 (Post방식일 때)

@Controller
public class TestController {

	@PostMapping("/test2") //≪
	public String test2(HttpServletRequest request) { //≪
		
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		String [] data3 = request.getParameterValues("data3");
		
		System.out.println("data1 : " + data1);
		System.out.println("data2 : " + data2);
		
		if(data3 != null) {
			for(String str1 : data3) {
				System.out.println("data3 : " + str1);
			}
		}
		
		return "result";
	}
    }

-Get방식일 때와 Post방식일 때 파라미터를 추출하는 방식이 동일하다는 것을 확인 가능!

 

WebRequest 사용하기

  • WebRequest는 HttpServletRequest 클래스를 확장한 클래스이다.
  • 사용방법은 HttpServletRequest와 동일
  • HttpServletRequest보다 기능이 약간 더 많음

예제

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>
	
	<hr/>
	<a href='test3?data1=100&data2=200&data3=300&data3=400'>test3</a><br/>
	
</body>
</html>

2. TestController 생성 (Get방식일 때) - Post와 방식 동일

@Controller
public class TestController {

	@GetMapping("/test3")
	public String test3(WebRequest request) { //≪
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		String [] data3 = request.getParameterValues("data3");
		
		System.out.println("data1 : " + data1);
		System.out.println("data2 : " + data2);
		for(String str1 : data3) {
			System.out.println("data3 : " + str1);
		}
		
		return "result";
	}
    }

 

@PathVariable사용하기

  • 데이터가 요청 주소에 있을 경우 값을 주입받을 수 있는 어노테이션
  • Restful API 서버 프로그래밍 시 많이 사용하는 방식
  • 파라미터의 이름이 아니라, 순서를 가지고 추출함
  • 요청주소/값1/값2/값3

예제

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>

	<hr/>
	<a href='test4/100/200/300'>test4</a><br/>
	
</body>
</html>

2. TestController 생성

@Controller
public class TestController {

	@GetMapping("/test4/{data1}/{data2}/{data3}") //≪
		public String test4(@PathVariable int data1,  //≪
					@PathVariable int data2,  //≪
					@PathVariable int data3) { //≪
		System.out.println("data1 : " + data1);
		System.out.println("data2 : " + data2);
		System.out.println("data3 : " + data3);
		
		int add = data1 + data2 + data3;
		System.out.println("add : " + add);
		
		return "result";
	}
    }

 

RequestParam사용하기

  • 파라미터 데이터를 직접 주입 받을 수 있음
  • 지정된 변수의 이름과 파라미터의 이름이 같은 경우 값을 주입받음
  • 가능한 경우 형 변환도 처리해줌
  • value : 파라미터의 이름과 변수의 이름이 다를 경우 파라미터 이름을 지정한다.(대부분 동일하게 함)
  • required : false를 설정하면 지정된 이름의 파라미터가 없을 경우 null이 주입된다.

예제

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>

	<hr/>
	<a href='test5?data1=100&data2=200&data3=300&data3=400'>test5</a><br/>
	
</body>
</html>

2. TestController 생성

@Controller
public class TestController {

	@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 a1 : value3) {
			System.out.println("data3 : " + a1);
		}
		
		return "result";
	}
    }

또는 이름이 동일할 시 value 사용하지 않음

@Controller
public class TestController {

	@GetMapping("/test7")
		public String test7(@RequestParam int data1, //≪
					@RequestParam (required = false) String data2, //≪
					@RequestParam (defaultValue = "0") int data3) { //≪
		System.out.println("data1 : " + data1);
		System.out.println("data2 : " + data2);
		System.out.println("data3 : " + data3);
		
		return "result";
	}
    }

 

 

'SPRING' 카테고리의 다른 글

[SPRING] View Resolver 뷰리졸버  (0) 2021.07.19
[SPRING] 객체로 파라미터 주입 받기  (0) 2021.07.19
[SPRING] 요청 방식  (0) 2021.07.19
[SPRING] URL MAPPING  (0) 2021.07.19
[SPRING] Spring 프로젝트 세팅하기  (0) 2021.07.19

댓글