[Spring] @ResponseBody 와 @RequestBody

서현서현·2022년 8월 16일
0

Spring

목록 보기
16/31

이번에야말로 진짜 정리한다

일단 이거 알아야함. 우리는 화면전환이 없는 통신, 즉 비동기통신을 위해서 데이터를 body에 담아 보낸다. 이때 데이터의 형식은 대표적으로 JSON이 있음!

@Controller 어노테이션을 사용하면 return으로 반환되는 문자열에 대해 view를 띄워줬었다. (뷰리졸버 게시물 참고!)

그런데 이제 프로젝트에 사용할 예제를 찾아보던중 @ResponseBody를 사용하는 컨트롤러가 있는것이다... 사실 여러번 봤는데 항상 완벽히 이해를 못하고 넘어가서 그런지 자꾸 까먹는다. 그래서 이번에 완벽히 이해해버렸는데..!


@ResponseBody를 이용하면 view가 아니라 반환값이 그대로 클라이언트에 return된다. 화면에 띄우는 실험을 해보면 알수있다. 텍스트가 그대로 뜬다. vo객체를 반환하면 json형태로 띄운다.

여기서 두 어노테이션의 용도가 감이오는데....
웹페이지에서 json으로 요청한 파라미터를 java단에서 받으려면 java Object로 변환해야하고, response시에도 java Object를 json으로 변환해줘야한다. 즉 두 어노테이션이 이 역할을 해주는것! JSON이나 XML형태의 데이터 송수신을 해줘버리는것이다!

@RequestBody

: HTTP body 안의 JSON 데이터를 VO에 매핑한다. 즉 HTTP요청을 자바객체로 전달받는다.

@ResponseBody

: VO객체를 JSON으로 바꿔 HTTP body 안에 담는다. 즉 메소드 return값을 body에 담는것!

	@ResponseBody
	public void seatForm(@RequestBody String data) {

이런식으로 쓰이는것이다. @RequestBody로 요청객체의 JSON데이터를 java객체로 바꿔서 파라미터로 사용하고, 이 컨트롤러에서 만든 return값을 @ResponseBody를 이용해서 http body에 담아준다.

@RestController

: 공부할때 @ResponseBody를 쓰면서 @RestController도 배웠었다. 매번 메소드마다 @ResponseBody를 써주기 귀찮으니까 @RestController로 퉁쳐주는것이다. 리턴값에 자동으로 ResponseBody가 붙어 리턴된다. 즉 Controller_RequestBody 역할인것

예제

 	$.ajax({
		  type : 'post',
		  url : '${cPath}/fr/pay/fee/list',
		  contentType: 'application/json',
		  data : JSON.stringify(datas),
		  dataType : 'json',
		  success : function(data){

		      alert('ajax 완료!');

		  },
		  error : function(data){
		    alert("ajax 실패!");
		  }
	})

post로 보낼거고, 보내는 타입은 json이니까 미리 넣어놓은 datas를 JSON.stringify를 이용해 json으로 변환해줌. 또한 컨트롤러로 보내서 받아올 데이터도 json형식으로 지정했음!

@ResponseBody
@PostMapping("/list")
public String feeListPost(@RequestBody FrFeeVO vo) {
	
	// 일단 전월에 대한 납부액이 fee테이블에 들어가있다고 가정
	// 이 회면에 딱 들어왔을때 전월에 대한 정보가 뜨면 된다.
	System.out.println("===================전===========================");
	System.out.println("===================전===========================");
	System.out.println("===================전===========================");
	System.out.println("===================전===========================");
	System.out.println("===================전===========================");
	System.out.println("===================전===========================");
	System.out.println(vo); 
	vo = service.feeList(vo);
	System.out.println("==================후============================");
	System.out.println("==================후============================");
	System.out.println("==================후============================");
	System.out.println("==================후============================");
	System.out.println("==================후============================");
	System.out.println("==================후============================");
	System.out.println(vo);
	
	
	
	return "fr/pay/fee/feeList";
}

우선 파라미터를 먼저 보면, @RequestBody 어노테이션을 이용해 ajax요청이 왔을때 해당 http요청의 body에 존재하는 json 데이터를 파싱해서 vo에 자동으로 바인딩해준다.

또한 ajax는 json으로 데이터를 받기로 정했기 때문에 vo를 json으로 변환해 http body에 담을 수 있도록 @ResponsBody 어노테이션을 메소드에 달아준다...

0개의 댓글