[스프링MVC] 어노테이션 이야기 - REST와 @ResponseBody

웹 개발/스프링 프레임워크

2021. 12. 14.

REST와 @ResponseBody 어노테이션

스프링MVC에서 컨트롤러의 메서드는 "논리적인 뷰"를 반환하는 것으로 상정한다.

하지만 REST 서비스는 리소스를 반환해야하기 때문에 상성이 맞지 않다.


그럴 땐 컨트롤러 메서드에@ResponseBody 붙여준다.

@ResponseBody를 붙인 메서드의 반환은, 뷰가 되는 것이 아니며
즉시 HTTP 응답 스트림으로 사용된다.

 

반환된 값은 디스패쳐 서블릿에 등록된 메시지 컨버터 빈을 거쳐
JSON 및 XML로 변환되고 HTTP 응답 스트림에 쓰인다.

@Controller
@ResquestMapping(value="/singer")
public class SingerController {
  final Logger logger = LoggerFactory.getLogger(SingerController.class);
  @Autowired private SingerService singerService;

  @ResponseStatus(HttpStatus.OK)
  @RequestMapping(value = "/listdata", method = RequestMethod.GET)
  @ResponseBody
  public Singers listData() {
     return new Singers(singerService.findAll());
  }
}

스프링 4.0부터는 @RestController

@RestController 클래스 수준 어노테이션을 사용하면,
@RequestMapping이 붙은 메서드에 자동으로 @ResponseBody가 적용된다.
@GetMapping, @PostMapping 등은 @RequestMapping을 래핑한 버전이므로 역시 적용된다.