@ResponseBody 어노테이션

구글링, chatGPT에서 배운내용들 정리 

배경지식

Response Body(응답 바디) 가 뭐지?

📌 뜻:

HTTP 응답 중 실제로 브라우저나 클라이언트가 받아보는 내용(본문 부분)

보통 json 형태임.


@ResponseBody 어노테이션

📌 기본 정의

@ResponseBody는 메서드의 반환값을 HTTP 응답 본문으로 직렬화해서 그대로 내려보내라는 뜻이야.

  • HTML 페이지를 렌더링하는 대신
  • 문자열, JSON, XML, 객체 등응답 Body에 직접 씀
  • @ResponseBody : "응답 바디(json)를 채우겠다."

@ResponseBody 를 사용

HTTP의 BODY에 문자 내용을 직접 반환

'viewResolver' 대신에 'HttpMessageConverter'가 동작

기본 문자 처리 : StringHttpMessageConverter

기본 객체 처리 : MappingJackson2HttpMessageConverter

* Jackson : 객체를 json으로 바꾸어주는 라이브러리

byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

 

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

-inflrean 김영한


1. @Controller + 문자열 반환

-> 맵핑하고, 함수에서 처리할거 처리하고, 웹페이지 렌더링

@Controller
public class controller {
	@GetMapping("/hello")
    public String hello() {
        return "hello";  // → hello.html 템플릿 렌더링
    }
}

2. @Controller + @ResponseBody + 문자열 반환

-> 웹페이지가 읽을 수 있는 자료형(json, txt)으로 변환

@Controller
public class Controller {
	@GetMapping("/hello")
    @ResponseBody
    public String hello() {
    	return "hello";
    } 
}

 


*@RestController는 @ResponseBody가 포함되어 있어서 @RestController 가 붙은 컨트롤러 클래스에서 web을 띄우려고 하면 return 된 객체를 웹에 보여줌. 그래서 이 점을 유의해야 함.