관리 메뉴

공부 기록장 💻

[Spring] Spring API 개발 (HTTP @ResponseBody, 객체 전달) 본문

# Tech Studies/Java Spring • Boot

[Spring] Spring API 개발 (HTTP @ResponseBody, 객체 전달)

dream_for 2023. 1. 9. 10:56

인프런 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술"  정리

 

 


 

스프링에서 웹 개발 방식에는 3가지가 있다고 하였는데,

첫번째는 정적 컨텐츠 (정적 파일을 그대로 전달),

두번째는 MVC와 템플릿 엔진 (model, view, controller로 분할하여 controller의 로직을 토대로 렌더링이 된 html 페이지를 전달),

세번째는 API (View 없이 HTTP의 Message Converter을 통해 json 스타일로 객체를 response body로 반환) 방식이다.

 

 

 

세번째 방식인 API 에 대한 이해를 해보자.

 

@ResponseBody를 이용한 API - 문자열 전달 

우선 Response Body에 간단하게 문자열을 전달할 수 있다.

 

 

리턴 값으로 "hello" 와 요청 파라미터로 받은 name 을 그대로 화면에 출력하게 된다.

아래와 같이 name에 string!!! 을 담아 요청을 하게 되면, 아래와 같이 hellostring!!! 라는 문자열을 출력하게 된다.

 

 

 

@ResponseBody를 이용한 API - 클래스 객체 전달 

 

 

다음으로는 response body에 문자열이 아닌, 객체를 전달하는 방법이다.

 

"hello-api" 의 경로로 매핑되는 helloApi 메서드를 만들어보자.

@ResponseBody 어노테이션을 마찬가지로 추가해주고, request parameter 도 마찬가지로 String 형 변수 name을 추가해주자.

 

아래에서 static 정적 클래스인 Hello를 우선적으로 추가해줘야 하는데,

private String 형 name과 이에 맞는 getter, setter을 추가해주었다. (property 방식)

 

그리고 다시 helloApi 메서드 내에서, hello라는 이름의 Hello 클래스 객체를 선언해주었고,

request parameter로 받은 name을 setName 메서드의 인자로 주어 실행한다.

이후 return 값을 hello로 주도록 하자. 

 

 

/hello-api?name=spring!!! 의 경로로 접속해보면 다음과 같이

json 형태로 Hello 클래스의 변수인 name에 해당하는 값 spring!!! 이 나타난 것을 확인할 수 있다.

 

 

 

html 페이지를 넘겨주는 것은 <> 태그를 사용하는 xml 방식이고, 방금 살펴본 위의 방식은 json 방식이라 할 수 있다.

객체를 Response Body로 반환할 때는, 기본적으로 json 형식을 사용하게 된다.

 

 


 

@ResponseBody 의 동작 원리

 

 

 

1) hello-api 경로로 접속을 하게 되면, 내장 톰캣 서버에서 

2) helloController는 @ResponseBody 어노테이션을 확인하고, hello객체를 넘기고 viewResolver 대신에 HttpMessageConverter가 동작하며, 메서드 내 객체 존재를 확인한 후 JsonConverter을 실행한다. (기본 문자열 처리를 위해서는 StringMessageConverter가 동작하고, 기본 객체 처리를 위해서는 MappingJackson2HttpMessageConverter가 동작한다.)

3) JsonConverter을 통해 json 객체로 변환한 후 요청한 서버 또는 웹 브라우저로 넘겨준다.

 

 

728x90
반응형
Comments