- Spring MVC 마스터하기 3 (응답 부분)2022년 04월 22일
- starryeye
- 작성자
- 2022.04.22.:32
Spring에서는 요청과 마찬가지로 응답을 만드는 방법도 3가지이다.
ㄱ. 정적 리소스 응답 //파일을 그대로 전달
ㄴ. 뷰 템플릿 사용 //동적인 HTML 응답 (SSR)
ㄷ. HTTP 메시지 사용 //응답 HTTP Message Body에 직접 데이터 전달
ㄱ. 정적 리소스 응답
정적 리소스의 경로
-> 스프링 부트는 아래 디렉토리에 있는 정적 리소스를 제공한다.
/static, /public, /resources, /META-INF/resources
ㄴ. 뷰 템플릿 사용한 응답
뷰 템플릿을 거쳐서 HTML이 생성, 뷰가 응답을 만들어 전달한다.
(뷰 템플릿이 만들 수 있는 모든 것)
<뷰 템플릿의 경로>
src/main/resources/templates
ModelAndView
ModelAndView 객체 생성 시, 파라미터는 View name 이다.
.addObject 메서드로 뷰 템플릿에 전달할 데이터를 attributeName - attributeValue 쌍으로 넣어준다.
(Thymeleaf에서는 이를 ${data}로 꺼낼 수 있다.
Model
return type을 String으로 변경하는 순간 data를 전달할 다른 수단이 필요해졌다.
-> Model //ModelAndView에서 데이터 전달하는 역할만 뺀 것이다.
.addAttribute 메서드로 뷰 템플릿에 전달할 데이터를 attributeName - attributeValue 쌍으로 넣어준다.
class 레벨에는 @Controller가 있다고 생각해보자.
컨트롤러 메서드에서 return type이 String이면 이는 뷰의 논리적 이름이다.
(@ResponseBody, @RestController를 적용하면 응답 HTTP message body에 입력되는 방식으로 적용된다.)
ㄷ. HTTP Message Body에 직접 데이터 응답
@RestController
@RestController는 @Controller와 @ResponseBody를 함께 적용한 것과 동일한 기능을 제공한다.
ResponseEntity
HttpEntity의 자식클래스 이다.
body에 단순 텍스트를 넣는 예제기 때문에 generic type은 String으로 사용하고 있다.
응답 상태코드를 지정할 수 있다.
body에 Json을 넣을 경우 객체로 넣고 전달 해준다.
<참고>
"Spring MVC 마스터하기 예외처리 5" 포스팅을 참고하면
Map 자료구조를 json으로 변환 하는 예시를 볼 수 있음
@ResponseBody
@ResponseBody가 적용되어있고, return type이 String이면
응답 HTTP Message Body에 해당 문자열이 직접 넣어진다. (뷰찾기가 아님)
@ResponseBody에 위와 같이 return type을 객체로 하고 객체를 리턴하는 경우도 가능하다.
@ResponseStatus 에노테이션으로 응답 코드를 설정할 수 있다.
(에노테이션을 사용하면 동적으로 상태코드를 조절 할 수 없다. 필요하다면 ResponseEntity를 이용하자)
'Spring > MVC' 카테고리의 다른 글
Spring MVC Redirect, PRG (0) 2022.05.06 Spring MVC 마스터하기 4 (0) 2022.04.24 Spring MVC 마스터하기 2 (요청 부분) (0) 2022.04.19 Spring MVC 마스터하기 1 (0) 2022.04.17 Servlet + JSP의 MVC 패턴에서 Spring MVC 로 발전하는 모습 (0) 2022.04.05 다음글이전글이전 글이 없습니다.댓글