본문 바로가기
Framekwork/SPRING

[자바/스프링] API (getter, setter, json)

by 아이엠제니 2023. 2. 14.

 

 

💾 main > java > hello > hellospring > controller > HelloSpringApplication

package hello.hellospring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {

    @GetMapping("hello") // 웹 애플리케이션에서 /hello 라고 들어오면, 이 메서드를 호출함
    public String hello(Model model) {
        model.addAttribute("data", "hello!!"); // 데이터를 "hello!!" 라고 넘길 거임
        return "hello"; // resources > templates에 있는 hello를 찾아서 렌더링 해라
    }

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) { // 외부에서 파라미터를 받을 때 @RequestParam을 적는다
        model.addAttribute("name", name);
        return "hello-template";
    }

    @GetMapping("hello-string")
    @ResponseBody // body부에 데이터를 직접 넣겠다! 이 방식을 사용하지는 않음. (아마도)
    public String helloString(@RequestParam("name") String name) {
        return "hello " + name;
    }

    // api 방식 💡 이 부분 추가
    @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;
        }
    }

}

 

✔️ 따로 보기

    // api 방식
    @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 형식으로 출력!

 

💡 JSON

  • 속성-값 쌍, 배열 자료형 또는 기타 모든 시리얼화 가능한 값 또는 "키-값 쌍"으로 이루어진 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷. 비동기 브라우저/서버 통신을 위해 넓게는 XML을 대체하는 주요 데이터 포맷. (출처: 위키백과)

✔️ @ResponseBody 사용 원리

  • `@ResponseBody`를 사용
    • HTTP의 BODY에 문자 내용을 직접 반환
    • `viewResolver` 대신에 `HttpMessageConverter`가 동작
    • 기본 문자처리: `StringHttpMessageConverter`
    • 기본 객체처리: `MaapingJackson2HttpMessageConverter`
    • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
    • ❗클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 `HttpMessageConverter`가 선택된다.

 

 

 

[스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술] 강의 기록
300x250