MVC : Model, View, Controller
Controller
package hello.hello_spring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
View
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

controller에 먼저 hello-mvc라고 매핑 되어있나 컨테이너에서 찾음
모델 키는 name에 값은 내가 쿼리파라미터로 치는대로임.(ex localhost8080:hello-mvc?name=spring!)
예시를 보면 html파일 이름(hello-mvc)까지 써주고 뒤에 '?' 가 붙은뒤 'name' 이라는 키 뒤에 값으로 "spring!" 가 들어가는 거임.
매핑 되어있으면 return 문자열과 같은 html 파일이 있나 viewResolver가 templates 폴더에서 찾음
템플릿 엔진이 name을 받아서 hello + name 형식으로 html 변환 해서 브라우저에 띄어줌. 우리 같은 경우에는 hello spring!이 되는 것이다.

API
@ResponseBody 문자 반환
@GetMapping("hello-string")
@ResponseBody //http 응답 body에 return 값 넣어주겠다
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
- @ResponseBody를 사용하면 뷰 리졸버를 사용하지 않음
- 대신에 HTTP의 BODY에 문자 내용을 직접 반환(HTML BODY TAG를 말하는 것이 아님)

@ResponseBody 객체 반환
@GetMapping("hello-api")
@ResponseBody
public Hello hellApi(@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;
}
}
@ResponseBody를 사용하고 객체를 반환하면 객체가 JSON으로 변환된다

@ResponseBody 사용원리

- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter가 동작
- 기본 문자처리 : StringHttpMessageConverter
- 기본 객체처리 : MappingJackson2HttpMessageConverrter (jackson 라이브러리 버전2라는 뜻. json으로 변환하는 라이브러리는 대표적으로 구글의 g-son과 jackson이 있다.)
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있다
'spring' 카테고리의 다른 글
| 같은 타입의 Bean 충돌 해결(@Qualifier @Primary) (0) | 2025.02.04 |
|---|---|
| 의존관계 주입 / @RequiredArgsConstructor (0) | 2025.02.04 |
| 수동등록 bean(@Configuration, @Bean)과 자동등록 bean(@ComponentScan, @Component)이 충돌할 경우 (0) | 2025.02.04 |
| View 환경설정 (3) | 2025.01.31 |
| @Controller 랑 @RestController 차이점 (0) | 2025.01.23 |