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.Mapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
// 정적 컨텐츠
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data","hello!!");
String tmp = "hello";
return "hello";
}
// MVC와 템플릿 엔진
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name")String name,Model model){
model.addAttribute("name",name);
return "hello-template";
}
// api 방식 문자열 반환
@GetMapping("hello-string")
@ResponseBody // http 응답 바디부에 해당 내용을 직접 넣겠다는 어노테이션
public String helloString(@RequestParam("name") String name){
return "hello "+name; //"hello spring"
}
// api 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) {
this.name = name;
}
}
}
정적 컨텐츠
- 웹(클라이언트 요청) url 입력
- 톰캣(서버)
- 스프링 컨테이너에서 매핑되어 있는 컨트롤러가 있는지 탐색
- 관련된 컨트롤러가 없다면 resources 디렉토리에서 관련된 항목을 찾아 전달
MVC와 템플릿 엔진
<관심사의 분리 + 타임리프 엔진을 통한 html 변환>
- 웹(클라이언트 요청) url 입력
- 톰캣(서버)
- 스프링 컨테이너에서 매핑되어 있는 컨트롤러 발견
- 해당 컨트롤러에서 model에 필요한 데이터를 넣고 return 해야 하는 view의 이름과 model을 viewResolver에게 전달
- Thymeleaf 템플릿 엔진이 처리하여 변환한 html을 웹 브라우저에게 반환
API
@ResponseBody 어노테이션을 활용해 http 응답 바디부에 해당 내용을 직접 넣어 전달
String을 전달해 주어도 좋으나 객체(Class)를 반환하여 JSON 형식으로 전달하는 것이 기본
- 웹(클라이언트 요청) url 입력
- 톰캣(서버)
- 스프링 컨테이너에서 @ResponseBody 의 매핑되어 있는 컨트롤러 발견
- HttpMessageConverter가 객체(JSON) 혹은 문자열을 웹 브라우저에게 그래도 반환
- 문자처리 StringHttpMesaageConverter
- 객체처리: MappingJackson2HttpMessageConverter
+ 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 반환 데이터의 타입을 결정
'Development > Spring' 카테고리의 다른 글
컴퓨터 부팅 시 TomCat서버 자동 시작 설정 (0) | 2023.03.09 |
---|---|
Spring의 테스트 기능 (0) | 2023.03.09 |
Spring 첫 프로젝트 빌드시 No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.0.4 was found. 해결 (0) | 2023.03.08 |
Spring 에서의 예외처리 방법들 (0) | 2023.02.19 |
세션 (0) | 2023.02.06 |