기본 콘텐츠로 건너뛰기

라벨이 responseentity인 게시물 표시

스프링 MVC 응답 처리 이해하기: `@ResponseBody`, `ResponseEntity`, 그리고 뷰 반환의 차이

스프링 MVC 응답 처리 이해하기: @ResponseBody , ResponseEntity , 그리고 뷰 반환의 차이 스프링 MVC에서 컨트롤러 메서드는 결국 값을 return 합니다. 그런데 같은 return 이어도 어떤 경우에는 JSON이 내려가고, 어떤 경우에는 템플릿이 렌더링됩니다. 예를 들어 return "users/detail"; 는 화면 이름처럼 동작할 수도 있고, 응답 본문에 문자열 그대로 기록될 수도 있습니다. 이 차이는 자바 문법이 아니라 스프링 MVC의 반환값 해석 방식에서 생깁니다. 핵심은 컨트롤러가 무엇을 반환했는지가 아니라, 스프링이 그 반환값을 어떤 의미로 받아들이는지입니다. @ResponseBody 가 붙어 있는지, ResponseEntity<T> 를 반환하는지, 일반 @Controller 인지에 따라 내부 처리 경로가 달라집니다. 왜 같은 return 문인데 결과가 달라질까 가장 먼저 정리할 기준은 이것입니다. @ResponseBody 가 있으면 반환값은 HTTP 응답 본문으로 처리됩니다. ResponseEntity<T> 를 반환하면 응답 본문, 상태 코드, 헤더까지 함께 처리됩니다. 위 조건이 없고 @Controller 에서 String 을 반환하면 보통 뷰 이름으로 해석됩니다. 즉, 아래 두 코드는 문법은 비슷하지만 의미가 완전히 다릅니다. @Controller public class PageController { @GetMapping("/hello-page") public String hello() { return "hello"; } } 이 경우 "hello" 는 응답 문자열이 아니라 뷰 이름입니다. 스프링은 hello.html , hello.jsp 같은 실제 뷰를 찾으려 합니다. 반대로 다음 코드는 "hello" 를 응답 본문에 직접 씁니다. @Co...