이전 게시글과 연결된다 : 이전게시글
Message Body에 담아 반환사용 어노테이션 :
@Controller
원본 그대로 전달 (.html).
서버의 별도 처리없이 그냥 저장된거 반환해줌

🔗url :
http://localhost:8080/hello/world.html
상세 디렉토리 :src/main/resources/static/hello/world.html<< 인데
srcmain/resources/static까지는 기본 생성이라 url에서 생략됨
/static대신/public혹은/META-INF/resources도 사용 가능하다.
사용 어노테이션 :
@Controller
1️⃣ 정적 리소스 전달 과 다른점
- 함수가 반환될 때 동적으로 바뀌는 데이터들이 동봉?되어 있어야함.

@RequestMapping("/response-view1")
public String responseView(Model model) {
model.addAttribute("data", "sparta");
return "thymeleaf-view";
}
여기서 말하는 Model은 8. Model And View 반환에서 나오는 Model이다.
Model은 @Controller 어노테이션이 있고, 반환에 "동적인 뷰"가 필요할 때 사용이된다.
서버 <-> 클라이언트 사이의 통신에 Json 데이터폼이 사용되는 것 처럼
컨트롤러 <-> 뷰 사이의 전달 수단으로 Model이라는 데이터폼(지금은 그렇게 생각 할 수 잇음)이 사용된다고 보면 된다.

제이슨과 유사하게 attributeName : , attributeValue : 쌍으로 구성되어있고,
리스트 처럼 addAttribute 함수를 통해서 요소들을 추가해준다.
주요 사용 방법
1.@RequestMapping메서드의 메서드 인자에 사용 << 지금쓰는거
모델에서 객체를 생성하거나 접근하며,WebDataBinder를 통해 요청과 바인딩합니다.
2.@Controller클래스에서 메서드 레벨 애노테이션으로 사용
모든@RequestMapping메서드가 호출되기 전에 모델을 초기화합니다.
3.@RequestMapping메서드 자체에서 사용
해당 메서드의 반환 값을 모델 속성으로 표시합니다.
❓만약, 동적 페이지 안에서 필요한 데이터를 추가하지 못했다면?
위 스크립트를 보면 html에서
<h2 th:text="${data}"></h2>처럼data라는 이름을 가진 속성이 필요하다.
그런데 여기서addAttribute없이 그냥 호출하면 우째될까?
결과
그냥 빈칸으로 출력된다. 오류가 뜨지는 않음.
사용 어노테이션 :
@RestController,@ResponseBody,@ResponseEntity<Object>
🔶 특: HTTP Message Converter를 통하여 적합한 형태로 변환되어 반환된다.
@Controller 메서드에서는 HttpMessageConverter가 사용되지 않는다.⛔ 정적 HTML, View Template 또한 HTTP Message Body에 담겨서 전달된다.
현재 설명하는 Response의 경우는 정적 HTML, View Template을 거치지 않고 직접 HTTP Response Message를 만들어 전달하는 경우를 말하는것.
반환하는 데이터가 뷰가 아닌 데이터 그대로일 때(TEXT, JSON) 사용
메서드 위에 @ResponseStatus(HttpStatus.OK) 같이 응답코드를 작성할 수 있음 (하지만 메서드에서 응답 코드를 경우에 따라 바꿔야 할 경우 바꿀 수 없음.

ResponseEntity 위의 @ResponseBody와 다르게 ResponseEntity의 두번 째 파라미터는 상태 코드를 지정하는 Enum 상수?가 있다.
얘는 제네릭에 들어오는 변수 형태에 따라서 두가지로 나뉜다.
1. @ResponseEntity<> : @ResponseEntity<String>,@ResponseEntity<Integer> 등
2. @ResponseEntity<Object> : @ResponseEntity<Tutor>, @ResponseEntity<사용자지정 클래스>등
@ResponseBody
@GetMapping("/v5/response-body")
public ResponseEntity<Tutor> responseBody() {
Tutor tutor = new Tutor("wonuk", 100);
return new ResponseEntity<>(tutor, HttpStatus.OK);
}
이런식으로 사용됨 (RequestEntity랑 비슷. 근데 이건 response용도고 requestEntity는 읽기 전용임)
**@RequestParam, @ModelAttribute, @RequestBody**정적 리소스, View Template(@Controller), @ResponseBody, ResponseEntity<Object>