[Spring] API

Haeun Noh·2023년 8월 1일
1

TweeksStudy:1 (Spring)

목록 보기
6/13
post-thumbnail

0801


☘️1. 들어가며

  1. 코드 작성
    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name"), String name) {
        return "hello "+name;
    }
- @ResponseBody : httop의 body부분에 return하는 데이터를 직접 넣겠다는 의미

- `return "hello "+name;` : 내가 요청한 클라이언트에 그대로 값이 들어감.
  1. 서버 실행 후 http://localhost:8080/hello-string?name=spring!!!!!!!!!!로 접속

  2. 페이지에 hello spring!!!!!!!!!!이 뜬 것을 확인

  3. 페이지 소스 코드 보기를 하면 html 코드도 없이 정말 문자열만 화면에 가져온 것을 확인할 수 있음


👉1.1. 만약에 문자가 아니라 데이터를 요청한다면?

  1. 소스 코드 작성하기
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name ) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
  • 결과값이 JSON 형태로 나온다!

만약 http://localhost:8080/hello-api?name=김아무개 서버로 접속했다면 아래와 같은 JSON 형식의 결과가 나온다.

{
  "name": "김아무개"
}
  • 만약 @ResponseBOdy가 있고 객체를 반환한다면 기본으로 JSON 으로 결과값을 받아온다고 생각하면 된다!

  • (참고) getter setter 방식은 자바 빈 표준 방식, 또는 프로퍼티 접근 방식이라고 한다.


☘️2. @ResponseBody를 사용한 API 방식

  1. 웹 브라우저에서 먼저 http://localhost:8080/hello-api를 친다.

  2. 톰켓 내장 서버에서 hello-api가 왔어! 라고 인식 후, 스프링에 서버를 던져준다.

  3. 스프링은 hello-api가 있는지를 확인한다.

4-1. @ResponseBody가 없는 경우 : viewResolver에게 던짐

4-2. @ResponseBody가 없는 경우 : http에 내가 받은 데이터를 그대로 넘겨야 되겠구나~!

  1. 근데 객체네?

    • 기본 default : 객체가 오면 JSON방식으로 데이터를 만들어서 http 응답에 반환
    • JsonConverter와 StringConverter가 동작함
      • @ResponseBody가 없는 경우에는 viewResolver가 동작함
      • JsonConverter : 반환값이 객체일 경우
      • StringConverter : 반환값이 단순 문자열일 경우
  2. JSON 형식으로 변환한 데이터를 요청한 웹 브라우저 또는 서버에 응답해줌(보내줌)


👉2.1. 정리

  • @ResponseBody 를 사용
    • HTTP의 BODY에 문자 내용을 직접 반환
    • viewResolver 대신에 HttpMessageConverter가 동작
    • 기본 문자 처리 : StringHttpMessageConverter
    • 기본 객체 처리 : MappingJackson2HttpMessageConverter
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

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

- HTTP Accept 헤더 : HttpMessage 스펙을 보면 요청을 할 때 어떠한 포맷으로 받고 싶다고 하면 이것을 사용

☘️3. 총정리

정적 컨텐츠 - 파일을 그대로 내려준다.

MVC와 템플릿 엔진 - 템플릿 엔진을 model view 방식으로 쪼개서 view를 템플릿 엔진으로 html 파일을 프로그래밍 방식으로 rendering해서 rendering이 된 html을 고객에게 전달해준다.

API 방식 - 객체를 HttpMessageConverter를 사용하여 JSON 방식으로 반환해준다. (view 없이)



profile
Tistory로 옮기게 되었습니다. @haeunnohh

0개의 댓글