본문 바로가기
프로그래밍/SpringBoot

@ResponseBody와 @RequestBody는 언제써야할까

by 소소로드 2021. 1. 3.
 @ResponseBody
 @RequestMapping(value="/memberDelete", method=RequestMethod.POST)
 public String memberDelete(@RequestBody MemberVO memberVO, Model model) throws Exception {

  String inputPass = memberVO.getMemberPass(); // 입력한 비밀번호	
  MemberVO member = boardService.userCheck(memberVO); // 암호화된 DB비밀번호	
		
  ...
  이하생략
  ...
  return result;
  
 }

다음과 같이 코드를 짜다가

@ResponseBody와 @RequestBody를 잘 사용하고는 있는데

정확히 콕 찝어서 설명은 못하고 느낌적인 느낌으로 사용하는 나를 발견해서 재차 정리한다.

 

@ResponseBody : 자바 객체를 HTTP 요청 몸체로 변환

@RequestBody : HTTP 요청 몸체를 자바 객체로 변환

공식적인 설명은 이렇지만 잘 와닿지가 않는다.

 

내가 알고있는 정도의 지식을 풀어서 써보자면

@ResponseBody는 위의 설명에 덧붙여 언제쓰는지 이렇게 쓸 수 있을 것 같다.

자바 객체를 HTTP 요청 몸체로 변환한다는 말이 어렵지만 

그냥 리턴값을 쓸때 매핑URL이름이 아니라, 그 자체의 String이 결과가 된다는 점을 알면 된다.

즉, 저 어노테이션을 쓰면 return "/result"는 컨트롤러에서 /result라는 url을 찾으라는 의미가 아니라

"/result"라는 String을 반환하라는 것이다.

즉, 내가 어떤 상황으로 인해 url을 통해 뷰로 가는게 아니라 Stirng 자체를 반환하고 싶을때 쓰면된다.

 

@RequestBody위의 설명에 덧붙여 언제쓰는지 이렇게 쓸 수 있을 것 같다.

HTTP 요청 몸체는 언제쓸까? ajax통신과 같은 경우에 쓴다.

그러니까 HTTP 요청 몸체를 자바 객체로 변환한다는 말의 의미는

ajax와 통신할때 var param = {"memberId":memberId, "memberPass":inputPass}와 같은

파라미터를 컨트롤러에 보내면 저 어노테이션을 통해 자바 객체로 바꿔쓸 수 있고,(이렇게 안쓰면 에러남)

그래서 MemberVO과 알아서 자동으로 바인딩된다는 의미이다.

즉, ajax에서 파라미터를 받아올때 컨트롤러에서 저 어노테이션을 쓰면 되는구나, 라고 이해하면 쉽다.