스프링 웹 개발 기초(3) : API

sylvie·2021년 11월 12일
0

스프링부트

목록 보기
7/11
post-custom-banner

@ResponseBody 문자 반환

@Controller
  public class HelloController {
      @GetMapping("hello-string")
      @ResponseBody
      public String helloString(@RequestParam("name") String name) {
          return "hello " + name;
      }
}
  • @ResponseBody 를 사용하면 뷰 리졸버( viewResolver )를 사용하지 않음
  • 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

실행

http://localhost:8080/hello-string?name=spring

@ResponseBody 객체 반환

@Controller
  public class HelloController {
      @GetMapping("hello-api")
      @ResponseBody
      public Hello helloApi(@RequestParam("name") String name) {
          Hello hello = new Hello();
          hello.setName(name);
          return hello;
      }
      static class Hello {
          private String name;
          public String getName() {
              return name;
}
          public void setName(String name) {
              this.name = name;
} }
}

Json방식으로 화면에 표출된다.

@ResponseBody 사용 원리


풀어서 설명한다면,
@ResponseBody라고 오면 hello객체를 반환한다. 그 후 @ResponseBody일땐 HttpMessageConverter가 동작을 한다. 이때 HttpMessageConverter는 반환한 것이
String일땐 StringConverter가, 객체일땐 JsonConverter가 기본으로 동작한다.JsonConverter는 객체를 Json타입으로 변환해서 요청한 웹브라우저에게 반환하다.
정리하자면 아래와 같다.

  • @ResponseBody를 사용
    - HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신 HttpMessageConverter가 동작
    • 기본 문자처리: StringHttpMessageConverter
    • 기본 객체처리: MappingJackson2HttpMessageConverter
      (객체를 Json으로 변환해주는 대표적인 라이브러리 중 하나이고 스프링이 기본적으로 탑재하고 있다.)
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

참고 : 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter 가 선택된다.

post-custom-banner

0개의 댓글