스프링 - @RequestBody, @ResponseBody
@RequestBody / @ResponseBody
스프링에서 비동기처리를 하는 경우, (웹 페이지의 변경 없이 데이터를 주고 받을 때는 주로 비동기 처리를 이용한다.)
@RequestBody와 @ResponseBody 어노테이션을 이용한다.
클라이언트가 서버에게 데이터를 요청할 경우 요청 메세지의 본문(body)에 데이터를 담아서 보내야하며, 서버가 클라이언트에게 응답할 때도 응답 메시지의 바디에 데이터를 담아서 보내야한다.
본문에 담기는 데이터의 형식은 json형태이며, 바디의 데이터를 json형태로 송/수신 하기위해서 붙이는 어노테이션이 @RequestBody, @ResponseBody이다.
@RequestBody는 클라이언트가 전송하는 Json형태의 HTTP Body 내용을 Java Object로 변환시켜주는 역할을 한다. 그렇기 때문에 Body가 존재하지 않는 HTTP Get 메소드에 @RequestBody를 활용하려고 한다면 에러가 발생하게 된다. @RequestBody로 받는 데이터는 Spring에서 관리하는 MessageConverter들 중 하나인 MappingJackson2HttpMessageConverter를 통해 Java 객체로 변환된다.
Spring은 메세지를 변환되는 과정에서 객체의 기본 생성자를 통해 객체를 생성하고, 내부적으로 Reflection을 사용해 값을 할당하므로 @RequestBody에는 값을 주입하기 위한 생성자나 Setter가 필요 없다.
@ResponseBody는 반대로 java Object를 HTTP BODY로 변환시켜주는 역할을 한다.
@RestController
=> @Controller와 @ResponseBody가 결합 된 어노테이션.
View를 리턴하는 것이 아니라. 다음과 같이 바디에 데이터를 담아서 메세지를 그대로 리턴할 수 있다.
@RestController
@RequestMapping("/hello/*")
public class TestController {
@RequestMapping("/test")
public String test() {
return "test";
}
}
참고
https://mangkyu.tistory.com/72 [MangKyu's Diary]