Spring/Spring MVC

HTTP Response

민철킹 2021. 5. 10. 22:12

정적 리소스, 뷰 템플릿

 

스프링에서 응답 데이터를 만드는 법은 크게 3가지

  • 정적 리소스
  • 뷰 템플릿
  • HTTP Message(주로 JSON)

 


정적 리소스

 

스프링 부트는 ClassPath의 다음 디렉토리에 있는 정적 리소스를 제공

  • /static, /public, /resources, /META-INF/resources

src/main/resources는 리소스를 보관하는 곳이고, ClassPath의 시작 경로이다.

따라서 리소스를 넣어두면 스프링 부트가 정적 리소르로 서비스를 제공

 


 

뷰 템플릿

 

뷰 템플릿을 거쳐서 HTML이 생성되고, 뷰가 응답을 만들어 전달

HTML을 동적으로 생성하는 용도로 사용하지만, 다른 것들도 가능하다. 뷰 템플릿이 만들 수 있는 것이라면 뭐든지 가능하다.

 

스프링 부트는 기본 뷰 템플릿 경로를 제공함.

  • src/main/resources/templates

 

뷰 템플릿 생성

hello.html

  • 경로는 resources/templates/response/hello.html
  • 랜더링 될때 텍스트 부분을 data의 value값으로 치환해준다.

 

뷰 템플릿을 호출하는 컨트롤러

 


String으로 반환

 

  • @Controller이면서 String을 반환하면 그 반환 값은 뷰의 논리적 이름을 의미함.(뷰 리졸버 실행)
  • Model에 값을 담아서 전달

 


Void를 반환

 

  • @Controller를 사용하고, HttpServletResponse, OutputStream(Writer) 같은 HTTP Message Body를 처리하는 파라미터가 없으면 요청 URL을 참고하여 논리 뷰 이름으로 사용
    • 요청 URL : /response/hello
    • 뷰 호출 : templates/response/hello.html

이는 명시성이 매우 떨어지고 딱 맞는 경우가 잘 없기 때문에 잘 사용되지 않음.

 

 

스프링 부트의 타임리프 관련 추가 설정

docs.spring.io/spring-boot/docs/2.4.3/reference/html/appendix-application-properties.html#common-application-properties-templating

 

Common Application properties

 

docs.spring.io

 

 

 


HTTP API, Message Body에 직접 입력

 

HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP Message Body에 JSON 같은 형식으로 데이터를 실어 보냄.


단순 텍스트 전달

 

HttpServletResponse 객체를 통해 HTTP Message Body에 직접 응답 메시지 전달

 

HttpEntity를 상속받은 ResponseEntity를 통해 응답 메시지 전달

 

@ResponseBody를 사용해 응답 메시지 전달

 


JSON 데이터 전달

 

ResponseEntity를 반환

 

@ResponseBody에 객체 반환

  • @ResponseStatus를 통해 상태코드를 설정해줄 수 있다.
  • 하지만 이것은 애노테이션이기 때문에 응답 코드를 동적으로 변경할 수 없다.

 

@RestController = @Controller + @ResponseBody

 

 

 

반응형

'Spring > Spring MVC' 카테고리의 다른 글

ThymeLeaf 공부  (0) 2021.05.13
HTTP Message Converter  (0) 2021.05.11
HTTP Request Message  (0) 2021.05.09
HTTP Request Parameter  (0) 2021.05.07
HTTP 요청 - 헤더 정보  (0) 2021.05.07