Spring

스프링에서 입력값 추출하기 @RequestParam, request.getParameter

shika 2022. 1. 20. 21:20

스프링에서 값을 추출해보자

예를 들어 index.jsp에 이렇게 코드가 있다

<a href='test1?data1=100&data2=200&data3=300&data3=400'>test1 get</a>
	<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<br>
		data3 : <input type="checkbox" name='data3' value="200"/>data3 200<br>
		<button type="submit">test2 post</button>
	</form>
	<hr>

그리고 컨트롤러에서는 이렇게 있다

@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);
		}

		System.out.println("-----------------");
		return "result";
	}

	@PostMapping("/test2")
	public String test2(HttpServletRequest request) {
		String data1 = request.getParameter("data1");
		String data2 = request.getParameter("data2");
		String[] data3 = request.getParameterValues("data3"); // 체크박스는 아무것도 체크안하면 null값이 들어가서 에러발생함

		System.out.println(data1);
		System.out.println(data2);

		if (data3 != null) { // if문 넣는 이유가 체크박스 체크를 안하면 null이 되어서 에러발생하기 때문
			for (String str1 : data3) {
				System.out.println("data3 : " + str1);
			}
		}
		System.out.println("-----------------");
		return "result";
	}

이렇게 코드가 작성되어 진다면

result.jsp로 접속시에 정상적으로 값을 추출해 낼 수 있다.

 

주의할점은 파라미터는 무조건 String 즉 문자열로 추출이 된다는 점이다

그렇기 때문에 나중에 int 등 다른 타입으로 변환을 원한다면 형변환을 해줘야한다.

 

@GetMapping("/test1")에서 for문을 사용하지 않는다면 

data3은 400이 나와버리게 된다(String[] 이 아닌 String에 저장시)

그러므로 값이 여러개 들어가는 경우 String[]로 받고 진행하도록 하자.