16주차 - Spring (12) ajax를 통해 데이터를 주고받아보자

2022. 10. 21. 19:47Spring framwork

이번의 목표

01. ajax로 데이터를 전달해보자.

02. ajax로 데이터를 받아보자.


지난 시간에는 ajax로 보내는 데이터는 없이 데이터를 받아오는 것을 연습해봤습니다.

이번에는 데이터를 전송하고 데이터를 받는 것을 연습해보겠습니다.

 데이터를 전송한다는 부분이 추가 되었을 뿐이지 코드가 크게 달라지지 않기 때문에 비교를 하면서 보겠습니다.

좌: 데이터의 수신만 있는 코드 // 우:데이터의 송수신이 일어나는 코드

데이터 전송은 send() 메서드에 매개변수로써 값을 담는 것으로써 가능합니다.

이때에 전송하는 데이터는 Request의 body에 담기게 되며 컨트롤러에서 이 데이터를 이용하게 됩니다.

 

데이터를 전송하는 것은 매개변수로 사용하면 손쉽게 해결이 되지만 컨트롤러에서는 조금 체크할 사항들이 있습니다.

전송된 데이터는 request의 body에 위치하는데, 컨트롤러에서 이 데이터를 쓰기 위해서는 사용하고자 하는데이터가 request의 body에 있다는 것을 명시해주어야합니다. 이때 사용하는 코드가 바로 @RequestBody입니다.

좌 : 받은 데이터가 없는 컨트롤러의 코드 // 우 : 데이터를 전송받은 컨트롤러의 코드

@RequestBody를 체크하지 않는다면 스프링에서는 값을 찾아오지 못해 null이 반환되게 됩니다.

 

01. 페이지 코드
02. 컨트롤러 코드
03. 실행 화면

01. 페이지 코드

<head>
<meta charset="UTF-8">
<title>ex02</title>
<script type="text/javascript">

var req;

function send() {
		req = new XMLHttpRequest();
		req.onreadystatechange = changeText
		req.open('post','ex02')
		var reqData = document.getElementById('reqData')
		req.send(reqData.value)
	}

	function changeText() {
		if(req.readyState==4 && req.status==200){
			var print = document.getElementById('print')
			print.innerHTML = req.responseText
		}
	}

</script>
</head>
<body>

<!-- 메서드의 매개변수 reqData와 id가 반드시 같을 필요는 없다. 
매개변수 reqData가 되어줄 변수는 스크립트태그 안에서 만들어지는 var reqData이다. -->
<input type="text" id="reqData"><br>
<div id="print">출력 데이터</div>
<button type="button" onclick="send()">데이터 가져오기</button>
</body>

02. 컨트롤러 코드

	@GetMapping("ex02")
	public String ex02Get() {
		return "ajax/ex02";
	}
	
	@ResponseBody
	@PostMapping(value="ex02", produces = "text/html; charset=UTF-8")
	public String ex02Post(@RequestBody String reqData) {
		return "서버의 응답 데이터 : " + reqData;
	}

03. 실행 화면