@ , Request, Response로 알 수 있듯이 위 둘은 스프링 어노테이션이며 요청과 응답에 관한 것이란 것을 알 수 있다. 두 어노테이션은 스프링 비동기 처리를 하는 경우 사용한다.
왜 필요할까?
예를 들어 웹페이지에서 json으로 요청한 파라미터를 java에서 받으려면 java Object로의 변환이 일어나야 하고 또한 response 시에도 java Object를 json으로 변환이 필요하다.
위 역할을 해주는 것이 ResponseBody / RequestBody이다. 두 어노테이션을 통해 JSON이나 key/value, XML 형태로 데이터를 송수신 할 수 있다.
요청과 응답
클라이언트가 서버로 통신하는 메시지를 요청(Request)이라고 하며 반대로 서버가 클라이언트로 통신하는 메시지를 응답(Response)이라고 한다.
화면전환이 없는 비동기 통신을 하기 위해선 메시지 본문에 요청 / 응답에 데이터를 담아 보내야 하는데 이 본문이 바로 body이다.
따라서 RequestBody = 요청본문 / ResponseBody = 응답본문 이라고 생각하면 될 것이다.
@RequestBody
HTTP body 안에 JSON을 자바객체로 변경하여 VO 또는 DTO에 맵핑하는 스프링 어노테이션
HTTP 요청을 자바 객체로 전달받을 수 있다.
@ResponseBody
VO나 DTO 자바객체를 JSON으로 바꿔서 HTTP body에 담는 스프링 어노테이션
메서드의 return 값을 HTTP Response body에 담는 역할을 한다.
그러나 요청은 JSON으로 왔는데 Response가 XML을 내보낸다면 결과가 이상해질 수 있습니다.
때문에 HTTP Request body가 그대로 전달되어 Request와 같은 타입으로 반환된다.
비동기 통신에 사용되기 때문에 주로 Ajax통신에 많이 사용됩니다.
다음 예시의 메서드는 Json타입의 Ajax데이터를 파라미터 boardVO로 받아 가공 후 다시 JSON 형태로 리턴하는 메서드 입니다.@ResponseBody @RequestMapping(value = "/{boardNo}", method = RequestMethod.PUT) public String test(@PathVariable("boardNo") int boardNo ,@RequestBody BoardVO boardVO){ boardVO.setName("예시입니당."); return boardVO.getName; }