Java/Spring

[Spring] API

hh_lin 2022. 7. 19. 23:46

1. API

  • 템플릿 엔진과의 차이는 뷰없이 데이터가 그대로 요청한 클라이언트에 전달됨
  • @ResponseBody를 사용하면 viewResolver를 사용하지 않음
    HTTP의 Body에 문자 내용을 직접 반환(HTML BODY TAG 아님)
  • @ResponseBody를 사용하고 객체를 반환하는 경우 Spring에서는 기본적으로 JSON으로 변환됨

 

 

 

 

 

① 문자 반환

@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
    return "hello " + name;
}

 

 

http://localhost:8080/hello-string?name=spring 로 접근 시

: "hello spring" 확인 가능

 

소스보기 했을 때 html 태그없이 값 그대로 확인 가능 (템플릿 엔진과의 차이)

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

 

 

 

 

 

 

 

② 객체 반환

http://localhost:8080/hello-api?name=spring

JSON 형식으로 반환됨

 

 

 

 

 

 

 

① 웹 브라우저에서 localhost:8080/hello-api 요청

② 내장 톰캣 서버가 요청을 받아서 Spring에 넘김

③ Spring은 먼저 컨트롤러 쪽에서 hello-api가 있는지 찾음

④ @ResponseBody가 있기 때문에 viewResolver가 아닌 StringHttpMessageConverter가 동작함

    - 문자면 StringHttpMessageConverter, 객체면 MappingJackson2HttpMessageConverter가 기본으로 동작함
    - byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

    - 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택됨

⑤ Hello 객체를 반환해야 하기 때문에 JsonConverter에 의해 name:spring으로 변환되어 웹 브라우저로 넘겨짐

 

 

 

참고) 객체를 json으로 바꿔주는 라이브러리

: Jackson(Spring 기본값), Gson