Controller
๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ Mapping ์ ๋ณด๊ฐ ์ ์ฅ๋๋ ํด๋์ค. ( ๋ก์ง์ฒ๋ฆฌ๋ฅผ ๋ด๋น )
์ด๋ป๊ฒ ์ฒ๋ฆฌ ํ ์ง ์๋ ค์ฃผ๋ ์ญํ ๋ก ์ผ์ข ์ Model๊ณผ View์ Proxy์ญํ
jsp๋ ํ ํ๋ฆฟ์ ํตํด ๊ฒฐ๊ณผ๋ฌผ์ ํน์ ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐ ์์ผ์ฃผ๊ฑฐ๋ api์ ๊ฐ์ด ํน์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ๋ ์ญํ
์ด๋
ธํ
์ด์
@Controller
ํด๋น ํด๋์ค๋ฅผ controller๋ก ์ธ์ํ๊ฒ ํด์ฃผ๋ ์ด๋ ธํ ์ด์
@RequestMapping
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ(request)์ด ๋ค์ด์์๋ ์ด๋ค ์์ฒญ(uri)์ธ์ง ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
์ฃผ๋ก ํด๋์ค ๋ ๋ฒจ์์ ์ฌ์ฉ
์์ฑ
name : Request๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ด๋ป๊ฒ ๋ณด๋ฉด value์ ๊ฐ์ ๋ณด์ผ ์ ์์ผ๋, name์ ํฐํ๋ก ์ ์ธํ๊ณ value๋ก ์ธ๋ถ ๊ฒฝ๋ก๋ฅผ ์ง์
value / path :
uri path
์ ๊ตฌ๋ถํ์ฌ ์ด๋ค ํจ์๋ฅผ ์คํํ ์ง Mapping์ํค๋ ๊ฐmethod :
RequestMethod.GET
,RequestMethod.POST
์ ๊ฐ์ด ์์ฒญ ๋ฉ์๋๋ฅผ ๊ตฌ๋ถproduces : Response์ contentType์ ์ง์ ํ ์ ์๋ค.
params : Request์ ์์ฒญ uri ํ๋ผ๋ฏธํฐ๋ฅผ ๋ถ์ํ์ฌ ๋ณ์๋ก ์ฌ์ฉ
@PathVariable
:uri path
๋ก ๋ค์ด์ค๋ ๊ฐ์ ๊ตฌ๋ถํ์ฌ ๋ณ์๋ก ์ฌ์ฉํ๊ธฐ ์ํจ@RequestParam
:/store/item?name=pencil
๊ณผ ๊ฐ์ด ๋ค์ด์ค๋ uri์query string
์ ์ด์ฉํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์
consumes : request body์ ์ ์ฅํ ํ์ ์ ์ ํ
GetMapping, PostMapping, DeleteMapping, PutMapping ..
@RequestMapping์ ํน์ method ๊ณ ์ ์ ์ผ๋ก ์ ์ธ๋์ด ์๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
๋ฉ์๋์ ์ฌ์ฉ๋์๋ค๋ฉด ํน์ก ๊ฒฝ๋ก๊ฐ ์์ด๋ ํด๋์ค์ RequestMapping์ ์ฃผ์ ๋ฐ๋๋ค.
@ResponseBody, @RequestBody
๋น๋๊ธฐ๋ฅผ ์ฒ๋ฆฌ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ (View๋ฅผ ํตํด ์ถ๋ ฅ์ด ๋์ง์๊ณ http body์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์จ์ ๋ณด๋ด๋ ๊ฒ)
HTTP BODY์ ์ง์ ๋ฐํ. ํ ํ๋ฆฟ์์ง์ด ์๋ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ผ๋ ์ด๋ ธํ ์ด์ .
viewResolver
๊ฐ ์๋ HttpMessageConverter
๊ฐ ๋์ํ๋ฉฐ, String
์ด๋ฉด StringConverter
๊ฐ ๊ฐ์ฒด
์ด๋ฉด JsonConverter
๊ฐ ๋์ํ์ฌ default๋ ๊ฐ์ฒด๋ฅผ jsonํ์์ผ๋ก๋ง๋ค์ด์ ์๋ต.
ํด๋ผ์ด์ธํธ์ HTTP Acceptํค๋์ ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํ ํ์ ์ ๋ณด ๋์ ์กฐํฉํ์ฌ ๋ฐํ๋ฐฉ์ ์๋์ผ๋ก ๊ฒฐ์
๋ฉ์๋์ ๋ฐํ ๊ฐ์ด HTTP Response/Request body์ ์ง์ ์ง๋ ฌํ ๋์์์ Spring์ ์๋ฆฐ๋ค.
HttpMessageConverter๊ฐ ์กด์ฌํ์ฌ ํน์ ํํ(json,xml..)๋ก ๋ค์ด์จ ์์ฒญ ๊ฐ์ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํํ๊ณ ์๋ต์ ํน์ ํํ๋ก ๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
HttpMessageConverter
Spring์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก @EnableWebMvc๋ฅผ ์ฌ์ฉํด์ WebMvcConfigurer์ ๊ตฌํํด์ผ ํ๋ค.
ByteArrayHttpMessageConverter โ ๋ฐ์ดํธ ๋ฐฐ์ด ๋ณํ
StringHttpMessageConverter โ ๋ฌธ์์ด ๋ณํ
ResourceHttpMessageConverter โ ๋ชจ๋ ์ ํ์ ์ฅํ ์คํธ๋ฆผ์ ๋ํด org.springframework.- core.io.Resource ๋ฅผ ๋ณํ ํฉ๋๋ค.
SourceHttpMessageConverter โ javax.xml.transform.Source๋ฅผ ๋ณํํฉ๋๋ค.
FormHttpMessageConverter โ ์์ ๋ฐ์ดํฐ๋ฅผ MultiValueMap <String, String> ๋ก /์์ ๋ณํํฉ๋๋ค .
Jaxb2RootElementHttpMessageConverter โ Java ๊ฐ์ฒด๋ฅผ XML๋ก /๋ก๋ถํฐ ๋ณํํฉ๋๋ค (JAXB2๊ฐ ํด๋์ค ๊ฒฝ๋ก์์๋ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐ๋จ).
MappingJackson2HttpMessageConverter โ JSON ๋ณํ (Jackson2๊ฐ ํด๋์ค ๊ฒฝ๋ก์์๋ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐ๋จ)
MappingJacksonHttpMessageConverter โ JSON ๋ณํ (Jackson์ด ํด๋์ค ๊ฒฝ๋ก์์๋ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐ๋จ)
AtomFeedHttpMessageConverter โ Atom ํผ๋๋ฅผ ๋ณํํฉ๋๋ค (Rome์ด ํด๋์ค ๊ฒฝ๋ก์์๋ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐ๋จ).
RssChannelHttpMessageConverter โ RSS ํผ๋๋ฅผ ๋ณํํฉ๋๋ค (Rome์ด ํด๋์ค ๊ฒฝ๋ก์์๋ ๊ฒฝ์ฐ์๋ง ์ถ๊ฐ๋จ).
์คํ๋ง ๋ถํธ๋ Jackson2ObjectMapperBuilder
๋ฅผ JacksonAutoConfiguration
ํด๋์ค์์ ์๋์ผ๋ก ์ค์ ํ๊ธฐ ๋๋ฌธ์ ๋ณ๋ค๋ฅธ ์ค์ ์์ด ObjectMapper
๋ฅผ ์ด์ฉํด JSONํํ๋ฅผ ๋ณํํ ์์๋ค.
spring-boot-start-web์ jackson-databind๊ฐ ์๋์ผ๋ก ์์กด์ฑ์ด ์กํ๊ฒ์ ๋ณผ ์ ์๋ค.
@RestContoller
@ResponseBody๋ฅผ ๋ชจ๋ ๋ฉ์๋์ ์ ์ฉํ ๊ฒ๊ณผ ๋์ผํ ํจ๊ณผ
ํด๋์ค
ResponseEntity
Spring framwork๋ HttpEntity
๋ผ๋ ํด๋์ค๋ฅผ ์ ๊ณตํ๋๋ฐ ์ด๋ response/request์ HttpHeader์ HttpBody๋ฅผ ํฌํจํ๋ ํด๋์ค์ด๋ค.
HttpEntity๋ฅผ ์์๋ฐ์ Response์ ํด๋นํ๋ ๋ถ๋ถ์ ๋ด๋นํ๋ ํด๋์ค์ด๋ค.
status, header, body ๋ถ๋ถ์ ์์ /์ฝ์ ํ์ฌ ์๋ตํค๋๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ํด์ค๋ค.
๋ฉ์๋
build() : build ๋ด parameter๋ก ์๋ฌด๊ฒ๋ ์ ๋ ฅ์ ์ํ ์ null์ธ body์ res ๋ฐํํ๋ค.
parameter๋ก body๋ฅผ ๋ฐ์ ์ ์๋ค.
Reference
https://www.baeldung.com/spring-httpmessageconverter-rest
Last updated