쌓고 쌓다

[Spring] API 본문

프로그래밍/spring

[Spring] API

승민아 2023. 3. 22. 22:51
@Controller
public class HelloController {
    @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam String name) {
        return "hello " + name;
    }
}

@ResponseBody ?

html의 body 태그가 아니다.

http에 head와 body가 있는데 그 body이다. 이 body에 직접 데이터를 넣는다.

리턴한 문자열이 클라이언트에 그대로 넘어간다.

hello-string?name=string 요청 결과

 

 

 

이제. 문자열이 아닌 데이터를 요청이 들어왔다고 하자.

요청의 응답으로 Hello 객체를 반환해야한다.

 

Hello 클래스

public class Hello {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

 

이번에는 문자열이 아닌 이 Hello 객체를 응답으로 보내보자.

@Controller
public class HelloController {
    @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi (@RequestParam String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }
}

hello-api?name=api 요청 결과

객체를 반환하면 JSON 형태로 응답이 보내진다.

 

@ResponseBody 동작 방식

웹 브라우저에서 hello-api 요청을 보낸다. 톰캣 서버가 스프링에 요청을 던져준다.

스프링은 "hello-api"가 매핑이 되어 있음을 확인하고 @ResponseBody가 붙어있음을 확인한다.

 

1. @ResponseBody가 없었다면

@ResponseBody가 붙어있지 않았다면 viewResolver에게 맞는 템플릿을 찾게 던져진다.

@ResponseBody가 없으면 viewResolver

 

2. @ResponseBody가 존재

출처: 인프런 - 김영한

@ResponseBody가 붙어있다면 http 응답에 그대로 넣어야겠구나 판단한다.

문자인 경우는 응답에 그대로 넘겼지만 이번엔 hello 객체이다.

기존(@ResponseBody가 없음)에는 viewResolver가 동작했지만

@ResponseBody가 붙어있어 HttpMessageConverter가 동작한다.

 

1. 문자열인 경우 : StringConverter가 동작

2. 객체인 경우 : JSONConverter가 동작

 

객체가 오면 JSON 형태로 만들어서 http 응답에 반환한다. 

Comments