본문 바로가기
Java/스프링 입문 - 스프링 부트, 웹 MVC, DB 접근 기술

[스프링 웹 개발 기초 - (3)] API

by Rezal 2022. 6. 29.

 

- API 방식 : 일단 view 에 관여하지 않고 서버간 데이터만 전달하는 방식으로 이해하자.

 

HelloController : hello-string @GetMapping 추가

 

hello-string method

 

@ResponseBody

: 해당 요청에 대한 HelloController가 helloString 메소드를 실행하여 처리할 때,

입력받은 query string 의 name 의 value 를 HTTP의 body 부에 직접 "hello + (name key의 value)" 형태로 넘겨준다.

즉, ResponseBody 어노테이션 때문에 view가 없이 데이터만 넘겨줌.

 

html 태그 없이 body 부의 hello spring 만 보이는 상태.

 

 

 

helloApi Method

 

Hello static class 를 생성, helloApi 메소드에서 Hello 객체 인스턴스를 생성하여 RequestParam 으로 넘겨준 name key 의 value 를 Hello 객체의 인스턴스인 hello의 setName 으로 바인드 한 뒤, ResponseBody로 Hello 객체 타입으로 넘겨준다.

 

getter/setter - 관련용어 : 자바 빈 표준, 프로퍼티 접근방식

 

JSON 방식으로 출력되는 것을 확인할 수 있다. 소스코드(view-source)로 보아도 동일. 예전엔 xml 로 반환시키는 경우도 많았다.

 

 

***@ResponseBody 동작원리 

  1. 기존에 설명했던 것처럼 url 에 따른 Controller 를 찾는데, 처리 메서드가 @ReponseBody 가 적용되어있으면 viewResolver가 아닌 HttpMessageConverter 로 처리 메소드의 return 값(hello(name:spring))을 전달한다.
  2. 이 때, return 값이 단순 문자열이면 StringHttpMessageConverter, 객체면 MappingJackson2HttpMessageConverter 가 동작한다.
    • 객체를 Json 으로 컨버팅 할 때, 대표적으로 사용되는 대표적인 라이브러리가 구글의 gson 과 jackson 으로 2가지 이다.
    • 그외 byte 등 기타 return 은 HttpMessageConverter 라이브러리 표준에 따라 처리. 실무에서 그대로 사용해서 깊게 다룰 필요성이 적다.
  3. 컨버팅된 결과값을 요청한 웹 브라우저에 전달한다.

 

* HTTP Accept Header 요청에 따른 HttpMessageConverter 방식 설정

  • HTTP Accept Header
    • 만약 xml 등으로 변환해주고 싶다면, xml 로 반환할 수 있게 하는 라이브러리만 설정하여 코딩하고, 서버의 컨트롤러 반환 타입을 설정 해준 뒤, 라이브러리 표준에 맞게 HTTP Accept Header 를 설정하면 HttpMessageConverter 방식을 설정하여 xml 방식으로 반환할 수 있다.