쌓고 쌓다
[Spring] API 본문
@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 객체를 반환해야한다.
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;
}
}
객체를 반환하면 JSON 형태로 응답이 보내진다.
@ResponseBody 동작 방식
웹 브라우저에서 hello-api 요청을 보낸다. 톰캣 서버가 스프링에 요청을 던져준다.
스프링은 "hello-api"가 매핑이 되어 있음을 확인하고 @ResponseBody가 붙어있음을 확인한다.
1. @ResponseBody가 없었다면
@ResponseBody가 붙어있지 않았다면 viewResolver에게 맞는 템플릿을 찾게 던져진다.
2. @ResponseBody가 존재
@ResponseBody가 붙어있다면 http 응답에 그대로 넣어야겠구나 판단한다.
문자인 경우는 응답에 그대로 넘겼지만 이번엔 hello 객체이다.
기존(@ResponseBody가 없음)에는 viewResolver가 동작했지만
@ResponseBody가 붙어있어 HttpMessageConverter가 동작한다.
1. 문자열인 경우 : StringConverter가 동작
2. 객체인 경우 : JSONConverter가 동작
객체가 오면 JSON 형태로 만들어서 http 응답에 반환한다.
'프로그래밍 > spring' 카테고리의 다른 글
회원 리포지토리 테스트 케이스 작성 (0) | 2023.05.01 |
---|---|
회원 도메인과 리포지토리 만들기 (0) | 2023.04.29 |
[Spring] MVC와 템플릿 엔진 with @RequestParam (0) | 2023.03.18 |
[SpringBoot] 정적 컨텐츠(Static Content) (0) | 2023.03.11 |
[SpringBoot] 프로젝트 빌드하고 실행 with 빌드 에러 (0) | 2023.03.11 |
Comments