스프링 | 스프링 부트
스프링 부트(입문) - API(@ResponseBody)
Adose
2024. 8. 2. 19:27
- 서버에서 데이터를 보내는 방법
- 서버에서 템플릿 엔진을 통해 화면을 html로 웹브라우저에 전달 방법 (=MVC와 템플릿 엔진)
- 데이터를 responseBody(보통 json 형태로 전송, xml도 가능)에 넣어서 바로 전달하는 방법이 있다. (=API)
- template엔진과 API 방법 차이
- template 엔진은 view(html) 방식으로 return 된다면, API 방법은 그 문자(데이터, json 형식) 그대로 return 된다는 것을 알 수 있다.
데이터를 ResponseBody에 넣어서 바로 보내는 방법
@ResponseBody
http의 body부분을 의미하고, 응답 body에 내용을 넣어준다는 말이다.
이 응답 body에 들어갈 <형식>은 개발자 본인이 정하면된다 -> "json, xml, 문자열 등"
∵ 단축어 메모
command + shift + enter : 문장을 끝내주는 단축어
ex. Hello hello = new Hello( 이 상태에서 위 단축어를 사용해주면 Hello hello = new Hello(); 문장을 끝내준다.
command + n : getter and setter를 자동으로 생성해주는 명령어가 있는 단축어
getter, setter 외에도 생성자 등을 생성해준다.
클라이언트에서 데이터 요청을 받고 응답으로 데이터를 보내는 방법 (Json 형식)
@Responsebody를 사용하고 메서드가 객체를 return 한다면, 이 객체를 JSON으로 변환하여 응답 본문에 포함한다.
(-> 만약 메서드가 문자열을 return 하면 해당 문자열이 그대로 HTTP 응답 본문에 작성된다 -> 위에 설명함 )
@ResponseBody가 자동으로 호출하는 getName() 메서드를 통해, Hello 객체의 name 필드 값을 가져오고, 이를 JSON으로 직렬화 한다.
직렬화 과정에서는 해당 객체의 Getter 메서드를 이용하여 데이터를 추출하고, 이를 JSON 형태로 변환한다.
- 위의 코드에서 @RequestParam은 name 외의 다른 입력을 받지 않지만, 응답할때는 객체를 return 했다.
- 객체를 return했기 때문에 Json 형태로 직렬화 하는 과정에서 해당 객체의 Getter 메서드를 이용하여 데이터를 추출하기 때문에 test도 같이 응답 본문에 포함되어져 아래와 같은 결과가 나오는 것을 알 수 있다.
- 만약 getTest() 메서드가 없다면 ? -> 두번째 그림과 같이 test가 없는 것을 알 수 있다.
@ResponseBody 동작 방식
@ResponseBody 사용시
- Http의 Body에 문자 내용을 직접 반환한다.
- Http의 Body에 문자 내용을 반환하기 위해, View Resolver 대신, Http Message Converter가 사용된다.
StringConverter : 기본 문자를 입력으로 받을때, Http의 Body에 기본 문자 형태로 응답을 보낸다. (StringHttpsMessageConverter)
JsonConverter : 객체를 입력으로 받을때, Http Body에 Json 형태로 응답으로 보낸다.(MappingJackson2HttpMessageConverter)