본문 바로가기

👩‍💻 BackEnd/🌿 스프링 [Spring]

[ Spring ] Controller 에서 데이터를 어떤 형태로 받아야하는가? (@RequestBody, @RequestParam)

📌 개인적으로 헷갈려서 작성하게 된 글입니다. 참고자료는 아래 링크 참고 

1. form 데이터 

@RequestBody

- 폼 태그로 데이터를 전송 시 메서드의 변수명 상관이 없지만, 

@PostMapping("/reply")
public string reply(@RequestBody String request){
	return "result";
}

 

@RequestParam

- 폼 태그로 데이터 전송 시 데이터를 저장하는 이름으로 메서드의 변수명을 설정해주어야 함. 

name 을 전송한다는 가정하에 같은 변수 명으로 받아줘야 한다. 

@PostMapping("/reply")
public string reply(@RequestParam String name){
	return "result";
}

2. Json 형식의 데이터 

서버로 json형식의 데이터를 전송해보자. 

// 댓글 삭제
function commentDelete1(commentId, writer) {
	let boardId = $('input[name=boardId]').val();
	let data = { "boardId": boardId, "writer": writer };
	if (confirm("해당 댓글을 삭제하시겠습니까?")) {
		$.ajax({
			type: "put",
			url: "/comment/delete/" + commentId,
			data: JSON.stringify(data),
			contentType: "application/json; charset=utf-8",
			success: function(response) {
				let code = response.code;
				if (code == -1) {
					alert(response.msg);
					getCommentList();
				} else if (code == 1) {
					alert('댓글이 삭제되었습니다.');
				} else if (code == -99) {
					alert(response.msg);
				} else {
					alert("댓글 삭제 중 예외가 발생했습니다.");
				}
			}
			,
			error: function(error) {
				alert("ERROR :", error);
			}
		});
	}
}

 

@RequestParam

- 에러가 발생한다. 

- @RequestParam은 기본적으로 url 상에서 데이터를 찾는다. 

- form 태그 전송 시 전달이 잘 된 이유는 form 태그는 url 을 통해서 전달되기 때문 

- json으로 전송 시에는 url변화가 없고 body에 데이터를 포함하여 전송하기 때문에 @RequestParam 으로는 받을 수 없다. 

 

@RequestBody

- json 형태로 출력이된다. 

- 자동 객체 생성 -> 만약 데이터를 받아오는 변수들을 필드로 설정한 객체에 getter를 만든 뒤 파라미터로 객체를 넣어 받아온다면 자동을 해당 객체를 생성해준다. 

 

@RequestBody, @RequestParam 모두 Map<string,string> 으로 결과를 받아올 수도 있다.<string,string>

 

 


✅ 참고자료

 

Spring / @RequestBody vs @RequestParam 이해하기

컨트롤러에서 데이터를 인자에 할당하는 대표적인 방법으로는 @RequestBody 와 @RequestParam 이 있다. @Controller public class UserController { @PostMapping("/receive") public String age(@RequestParam String name) { System.out.prin

ocblog.tistory.com