Springframework @RequestBody 주의사항(?)

2018. 9. 30. 20:33Web/Spring

저와 같은 바보같은 분은 없을 것이라고 생각이 들지만 제가 겪었던 하나의 문제였기 때문에 작성해봅니다....


만약 @Controller 클래스에서 요청바디에 넘어온 데이터를 받기위하여 @RequestBody라는 어노테이션을 다들 많이 쓰실 겁니다. 다른 분들은 절대 저와 같은 바보같은 짓을 하시지는 않으셨겠지만, 저는 요청 바디로 넘어온 데이터를 적절히 2개의 객체로 나누기 위해서 메소드 파라미터에 2개의 @RequestBody를 사용하였습니다. 근데 이게 뭐람 에러 뚜뚱... 에러가 발생하였습니다. 무슨 에러인가 막 찾아보고 고민하던 중에 중요한 사실을 알게되었습니다. 

요청 바디로 넘어온 데이터를 받기위해 @RequestBody를 사용하는데 이 어노테이션은 스트림을 이용하여 요청바디의 데이터를 불러 온다는 것... 한번 열어서 사용한 스트림은 재사용이 불가능 하기 때문에 첫번째 @RequestBody로 받고 난 뒤, 다시 @RequestBody로는 당연히 받을 수 없는 것입니다... 혹시라도 저와 같은 분은 없을 것이라고 생각하지만...있으시다면 참고바라면서 작성하였습니다.


만약 2개의 객체의 요청바디의 데이터를 적절히 나눌 필요가 있다면 하나의 객체로 모든 데이터를 다 받아와서 그 객체를 이용해 다른 객체들에게 데이터를 나눠 담는 방법을 이용하시면 됩니다..




@RequestMapping("abc")

public String controllerMethod(@RequestBody A a,@RequestBody B b) {......} => 절대 안됩니다...