1. Spring-Boot-Devtools (패스)

2. HttpMessageConverters

3. JSONMessageConverters

4. ViewResolve

1. Spring-Boot-Devtools(패스)

1-1) Spring-Boot-Devtools

스프링 부트가 제공하는 optional한 툴임. 반드시 써야하는 것도 아님.

기존적으로 적용되는 properties 중에 변경되는 것들이 있음.

변경되는 설정들은 주로 cache를 끄는, cache와 관련된 설정을 false로 변경 함.

2. HttpMessageConverters

2-1) HttpMessageConverters

스프링 프레임워크에서 제공하는 인터페이스고, 스프링 MVC의 일부분임.

HTTP 요청 본문으로 들어오는 것을 객체로 변환하거나

객체를 HTTP 본문 응답으로 변경할 때 사용함.

주로 @RequestBody나 @RespnseBody와 함께 사용 됨.

어떤 데이터가 요청으로 들어올 때 요청의 본문에 데이터가 들어있고, 그것을 객체로 받고 싶으면

@RequestBody를 사용해 데이터를 객체로 받을 수 있음. 스프링이 알아서 Conversion(변환)해줌.

2-2) UserController

2-2)-1. @Controller

HttpMessageConverter, 그 중에서 어떤 요청을 받았는지 또는

어떤 응답을 보내야 하는지에 따라 달라짐. 예를 들어 요청이 JSON 요청이고

JSON 본문이 들어왔다고 치면 요청에는 ContentType이라는 헤더가 있는데,

ContentType에 JSON이라고 적혀 있고, 본문도 JSON임. 그러면 JSONMessageConverters가

사용돼서 JSON 메시지를 user라는 객체로 컨버팅 해줌. return할 때 user라는 객체를 return함.

⇒ http는 문자이기 때문에 객체 자체를 response로 내볼 낼 수 없음.

⇒ 이것을 변환하기 위해 HttpMessageConverters가 사용됨.

⇒ 컴포지션 타입(객체 안에 여러 개의 프로퍼티를 가질 수 있는 타입)일 경우 기본적으로

⇒ JSONMessageConverters가 사용됨. 일반 String 객체나 int 객체인 경우 int는 toString을

⇒ 사용해서 문자열로 변환할 수 있기 때문에 StringMessageConverter가 사용됨.

Untitled

→ @Controller를 사용할 경우에는 @RespnseBody를 꼭 넣어줘야 함.

→ 그래야 MessageConverters가 적용됨.

2-2)-2. @RestController

@RestController가 붙어있으면 @RespnseBody를 생략할 수 있음.

Untitled

3. JSONMessageConverters

3-1) UserControllerTest(로직 구현 전, 당연히 오류)

Untitled

Untitled

3-2) UserControllerTest 작성 후 로직 작성

Untitled

Untitled

3-3) UserController(User를 작성하지 못해 바인딩 못 받는 경우)

Untitled

Untitled

3-4) User

Untitled

Untitled

4. ViewResolve

4-1) ContentNegotiatingViewResolver

ContentNegotiatingViewResolver는 들어오는 요청의 Accept Header에 따라 응답이 달라짐.

Accept Header는 브라우저에서 웹 서버로 요청 시 요청 메시지가 담기는 헤더임.

암튼 이 로직은 어떤 요청이 들어오면 그 요청의 응답을 만들 수 있는 모든 view를 찾아내고,

최종적으로 Accept Header의 view 타입과 비교해서 선택함.

경우에 따라서 Accept Header를 제공하지 않는 경우도 있음.

그런 경우를 대비해 format 매개 변수를 사용함. /path?format=pdf와 같은 형식으로 알 수 있음.

4-2) 응답을 xml로

Untitled

Untitled

Untitled

Untitled