Spring

API

Coarti 2024. 1. 7. 21:56
  • 서버간 통신 시 JSON의 형태로 데이터를 주고 받는 것을 간단히 생각해두면 좋다
  • 특정 경로로 가면 어떠한 데이터를 받는다

 

간단한 동작 예시이다

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "hello!!!");
        return "hello";
    }

    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model) {
        model.addAttribute("name", name);
        return "hello-tamplate";
    }

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

HTTP 통신의 응답몸체에 값을 직접 넣는 것이다. 따로 받을 페이지가 없어도 값을 확인 해볼 수 있다.

그동안에 차이가 있다면 브라우저 흰 화면을 우클릭하여 페이지 소스를 보면 다른 태그없이 문자만 출력된것을 볼 수 있다.

컨트롤러에서 저 글자만 넘겨준 것이다


앞서 소개한 JSON으로 사용하기 위해 내용을 추가하자

    @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) {
            name = this.name;
        }
    }

해당 경로의 결과는 다음과 같다

Hello 클래스를 따로 분리하는게 정식이나 보기좋은 예시를 위해 작성했다

JSON 은 {key: value}의 형태로 이뤄진 객체이다. XML의 형태에서 JSON을 사용하는 추세다

 

정리하자면

컨트롤러에서 @ResponseBody가 있는 경로는 HTTP의 BODY에 문자 내용을 직접 반환한다.

ViewResolver 대신 HttpMessageConverter가 동작하고

단순 문자면 StringHttpMessageConverter(StringConverter)

객체의 경우 MappingJackson2HttpMessageConverter(JsonConverter)를 사용한다

byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다

 

구글의 Gson 라이브러리도 유명하지만 사용의 불편함이 없다면 Jackson 라이브러리도 훌륭하다

728x90