정적 컨텐츠의 반대 = API
MVC(Model, View, Controller)
관심사 분리 !
View → about 화면
Controller → about 비즈니스 로직, 내부 로직 처리
Model → 관련된 로직을 화면에 넘겨주는 방식
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
model에 담아서 보내면 View에서 렌더링 할 때 사용
실제 서버에서 돌면 hello! empty값이 th:text 값으로 바뀐다
API
- 문자를 내놓을 때
http에서 body부분에 데이터에 return값을 직접 넣어주겠다는 뜻
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello" + name;
}
}
http://localhost:8080/hello-string?name=spring!! 로 검색하면
화면에는 아래와 같이 뜨고 페이지 소스 코드를 보면 html 코드 없이 그대로 hello + name을 내려준다.
- 데이터를 내놓을 때
@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 getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private String name;
}
http://localhost:8080/hello-api?name=spring!!
왼쪽 사진과 같이 key : value인 json형태로 화면에 나타난다.
@ResponseBody 사용 원리
- HTTP의 BODY에 문자 내용을 직접 반환
- `viewResolver` 대신에 `HttpMessageConverter` 가 동작
- 기본 문자처리: `StringHttpMessageConverter`
- 기본 객체처리: `MappingJackson2HttpMessageConverter`
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
@ResponseBody가 없으면 → viewResolver에게 던짐
@ResponseBody가 있으면 → 그대로 데이터를 넘겨야 되겠구나 !
- 문자를 넘기면? StringConverter
- 객체를 넘기면? httpMessageConverter가 동작한다 -> JsonConverter
Hello 라는 객체가 오면, json 방식으로 데이터를 만들어서 http body에 반환을 하는 방식
@참고자료
[인프런] 김영한 - 스프링 입문 강의 (무료)
'개발 > Spring' 카테고리의 다른 글
[Spring] 스프링 입문 - 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2024.11.07 |
---|---|
[Spring] 스프링 입문 - 회원 서비스 테스트 (0) | 2024.11.07 |
[Spring] 스프링 입문 - 회원 서비스 개발 (0) | 2024.11.07 |
[Spring] 스프링 입문 - (회원 관리 예제) 회원 리포지토리 테스트 케이스 (0) | 2024.11.07 |
[Spring] 스프링 입문 - (회원 관리 예제) 회원 도메인과 리포지토리 (0) | 2024.11.05 |