카카오톡 플러스친구 챗봇을 개발하던 중 @RequestBody를 사용할 일이 생긴 김에 공부하여 정리
- @RequestMapping에 의해 POST 방식으로 전송된 HTTP 요청 데이터를 String 타입의 body 파라미터로 전달한다.
- @RequestBody를 사용하지 않은 경우 : query parameter, form data를 object에 맵핑한다.
- @RequestBody를 사용하는 경우 : body에 있는 data를 HttpMessageConverter를 이용해 선언한 object에 맵핑한다.
@RequestMapping(value = "/message", method = RequestMethod.POST)
public ResponseMessageVO message(@RequestBody RequestMessageVO vo) {
ResponseMessageVO res_vo = new ResponseMessageVO();
MessageVO mes_vo = new MessageVO();
String command = vo.getContent();
if(command.equals("메뉴")) {
}
~~~
res_vo.setMessage(mes_vo);
return res_vo;
}
- 위에서
@RequestBody
를 사용하여 사용자가 보낸 json 형식의 메세지 데이터를 String 타입의 body 파라미터로 받아서 RequestMessageVO 객체에 담는다. - 그리고 객체에 담긴 String 데이터를 if문에서 비교하여 사용한다.
- @ResponseBody 어노테이션이 @RequestMapping 메서드에서 적용되면 해당 메서드의 리턴 값을 HTTP 응답 데이터로 사용한다.
- 임의의 Response 객체 생성
public class ResponseTransfer { private String text; // standard getters/setters }
- @Response 사용
@Controller @RequestMapping("/post") public class ExamplePostController { @Autowired ExampleService exampleService; @PostMapping("/response") @ResponseBody public ResponseTransfer postResponseController( @RequestBody LoginForm loginForm) { return new ResponseTransfer("Thanks For Posting!!!"); } }
- 결과
{"text":"Thanks For Posting!!!"}