본문 바로가기

🤔Troubleshooting

Spring / Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'Window' : Request with GET/HEAD method cannot have body.

fetch api 를 이용하여 @RequestBody 와 @RequestParam 을 실습해보려고 했는데 왠일인지 그전에 오류를 만나게 되었다.

 

실습 환경

먼저 데이터를 전송하기위해 간단한 버튼하나를 만들었다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<button id="postData">
    데이터 전송
</button>
<script>
    const $postDataButton = document.querySelector("#postData")

    const postData = event => {
        console.log("데이터 전송");

        fetch("/receive", {
            method: 'get',
            headers: {
                'content-type': 'application/json'
            },
            body : JSON.stringify({
                name : "홍길동",
                age : "13"
            })
        })
    }

    $postDataButton.addEventListener("click", postData);
</script>
</body>
</html>

 

왼쪽의 '데이터 전송' 버튼을 누르면

{

name : "홍길동"

age : "13"

}

의 데이터가 전송된다.

 

데이터를 받는 컨트롤러 또한 다음과 같이 구현해 주었다.

 

 

 

 

컨트롤러

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;

@Controller
public class UserController {

	@GetMapping("/receive")
	public String age(@RequestBody String name) {
		System.out.println("통신 성공");
		System.out.println(">>> " + name);
		return "index";
	}
}

 

 

오류 발생

하지만 정상적으로 동작하지 않았고, 개발자 도구에서 확인해보니 다음과 같은 오류 문구를 확인할 수 있었다.

 

몇 십분동안 대소문자도 바꾸어보고 오타체크도 해보고 인터넷검색도 해보았지만 무슨 문제인지 알 수가 없었다.

하지만 해결은 간단하였다.

 

오류 해결

원인은 get 방식이었다.

분명 Request with GET/HEAD method cannot have body.  이렇게 적여 있었건만... 제대로 읽지도 않고 제대로 삽질을 했다.

post 방식으로 변경하니 정삭적으로 잘 동작!

 

에러가 발생한다면 꼭 에러 문구를 꼼곰히 읽어보자!

 

반응형