웹을 개발한다는 건 크게 세 가지 방법이 있다.
-정적 컨텐츠 -MVC와 템플릿 엔진(가장 많이 씀-jsp, php 등) -API
API 방식
정적 콘텐츠 방식 제외하고. MVC방식이냐 API방식이냐만 알고 있으면 됨.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello" + name; //hello spring
}
@ResponseBody HTTP 통신 프로토콜(그 중 POST)에... header부분과 body부분이 있다. HTML header/body말고 HTTP 통신 과정에 body부분에 이 내용을 직접 넣어주겠다.
반응을 HTTP BODY에 넣어라~는 의미
HTML태그 없습니당
이런 식으로 화면에 띄우는 걸로는 잘 사용 안함. 데이터를 넘길 때 많이 쓰는 듯
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;// hello 객체를 넘겼다.
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
hello라는 객체를 넘겼는데 ? json데이터 타입으로 넘겨졌음.
key:value.getter setter 자연스럽게 json데이터 타입으로 넘겨주넹...
ajax. 비동기 통신할 때 API방식으로 받아오는 것.
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
자바 빈 규약. private String name 바로 접근 못함.
메서드로 셋팅하고 접근해서 가져와. 자바 빈 표준 방식. 게터세터 방식. 프로퍼티 접근 방식이라고도 하고...
@ResponseBody
자~~ 요청합니다! 톰켓 내장 서버에서 요청이 왔네! 스프링 컨테이너에 던져. 어라라? @responseBody 붙어있네? MVC에선 viewResolver에다가 했는데... @ResponseBody있다? 어? viewResolver대신에 HttpMessageConverter 동작!
단순 문자면 StringConverter동작, 데이터 그대로 던질꺼야.
근데 객체면??? 뭐야? 객체 어떻게 줘야 하는 거지? 객체가 오면 기본 default가 json방식으로 데이터를 만들어서 Http응답에 반환하겠다. HttpMessageConverter- JsonConverter동작 바꿔서 응답해준다.
이것이 바로 @ResponseBody를 사용한 API임.
근데 왜 API라고 이름이 붙어진걸까???? 객체 → json으로 바꿔주는 라이브러리 유명한 게 Jackson2이라는 라이브러리임. 구글의 gson도 있음. API이용해서 HttpMessageConvertor가 동작해서 API방식인가보다.
MappingJackson2HttpMessageConverter(스프링은 이걸 기본으로 넣어뒀음)
타임리프도 JSP도 템플릿 엔진인가?
https://okky.kr/article/342347
해당 포스팅은 인프런 김영한님의 스프링 강의를 따라가며 정리한 노트입니다 :)
'Spring > Spring' 카테고리의 다른 글
spring-boot MVC와 템플릿 엔진 (0) | 2021.04.15 |
---|---|
spring-boot 정적 컨텐츠, static (0) | 2021.04.15 |
spring-boot gradle 빌드하고 실행하기 및 버전 오류 (0) | 2021.04.15 |
spring-boot View 환경 설정 (0) | 2021.04.15 |
spring-boot 프로젝트 생성 (0) | 2021.04.14 |
Uploaded by Notion2Tistory v1.1.0