

@ResponseBody๋ฅผ ์ฌ์ฉ
- HTTP์ BODY์ ๋ฌธ์ ๋ด์ฉ์ ์ง์ ๋ฐํ
viewResolver๋์ ์HttpMessageConverter๊ฐ ๋์- ๊ธฐ๋ณธ ๋ฌธ์์ฒ๋ฆฌ :
StringHttpMessageConverter- ๊ธฐ๋ณธ ๊ฐ์ฒด์ฒ๋ฆฌ :
MappingJackson2HttpMessageConverter- byte ์ฒ๋ฆฌ ๋ฑ๋ฑ ๊ธฐํ ์ฌ๋ฌ HttpMessageConverter๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ฑ๋ก๋์ด ์์
์ฐธ๊ณ
- ์๋ต์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ์ HTTP Aceept ํค๋์ ์๋ฒ์ ์ปจํธ๋กค๋ฌ ๋ฐํ ํ์ ์ ๋ณด ๋์ ์กฐํฉํด์
HttpMessageConverter๊ฐ ์ ํ๋๋ค.
@RequestBody, HttpEntity(RequestEntity),@ResponseBody, HttpEntity(ResponseEntity) public interface HttpMessageConverter<T> {
boolean canRead(Class<?> clazz, @Nullable MediaType mediaType);
boolean canWrite(Class<?> clazz, @Nullable MediaType mediaType);
List<MediaType> getSupportedMediaTypes();
T read(Class<? extends T> clazz, HttpInputMessage inputMessage)
throws IOException, HttpMessageNotReadableException;
void write(T t, @Nullable MediaType contentType, HttpOutputMessage
outputMessage)
throws IOException, HttpMessageNotWritableException;
}
HTTP ๋ฉ์์ง ์ปจ๋ฒํฐ๋ HTTP ์์ฒญ, HTTP ์๋ต ๋ ๋ค ์ฌ์ฉ๋๋ค.
canRead(),canWrite(): ๋ฉ์์ง ์ปจ๋ฒํฐ๊ฐ ํด๋น ํด๋์ค, ๋ฏธ๋์ด ํ์ ์ ์ง์ํ๋์ง ์ฒดํฌread(),write(): ๋ฉ์์ง ์ปจ๋ฒํฐ๋ฅผ ํตํด์ ๋ฉ์์ง๋ฅผ ์ฝ๊ณ ์ฐ๋ ๊ธฐ๋ฅ
| 0 | ByteArrayHttpMessageConverter |
|---|---|
| 1 | StringHttpMessageConverter |
| 2 | MappingJackson2HttpMessageConverter |
๋ช๊ฐ์ง ์ฃผ์ํ ๋ฉ์์ง ์ปจ๋ฒํฐ๋ฅผ ์์๋ณด์.
ByteArrayHttpMessageConverter:byte[]๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ํด๋์ค ํ์ :
byte[], ๋ฏธ๋์ด ํ์ :*/*,- ์์ฒญ ์)
@RequestBody byte[] data- ์๋ต ์)
@ResponseBody return byte[]์ฐ๊ธฐ ๋ฏธ๋์ดํ์application/octet-streamStringHttpMessageConverter:String๋ฌธ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ํด๋์ค ํ์ :
String, ๋ฏธ๋์ด ํ์ :*/*- ์์ฒญ ์)
@RequestBody String data- ์๋ต ์)
@ResponseBody return "ok"์ฐ๊ธฐ ๋ฏธ๋์ดํ์text/plainMappingJackson2HttpMessageConverter: application/json
- ํด๋์ค ํ์ : ๊ฐ์ฒด ๋๋
HashMap, ๋ฏธ๋์ดํ์application/json๊ด๋ จ- ์์ฒญ ์)
@RequestBody HelloData data- ์๋ต ์)
@ResponseBody return helloData์ฐ๊ธฐ ๋ฏธ๋์ดํ์application/json๊ด๋ จ
content-type: application/json
@RequestMapping
void hello(@RequestBody String data) {}
content-type: application/json
@RequestMapping
void hello(@RequestBody HelloData data) {}
?
content-type: text/html
@RequestMapping
void hello(@RequestBody HelloData data) {}
@RequestBody, HttpEntity ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ๋ค.canRead()๋ฅผ ํธ์ถํ๋ค.@RequestBody์ ๋์ ํด๋์ค (byte[], String, HelloData)text/plain, application/json, */*canRead() ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด read()๋ฅผ ํธ์ถํด์ ๊ฐ์ฒด ์์ฑํ๊ณ , ๋ฐํํ๋ค.@ResponseBody, HttpEntity๋ก ๊ฐ์ด ๋ฐํ๋๋ค.canWrite()๋ฅผ ํธ์ถํ๋ค.byte[], String, HelloData)@RequestMapping์ produces)text/plain, application/json, */*canWrite() ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด write()๋ฅผ ํธ์ถํด์ HTTP ์๋ต ๋ฉ์์ง ๋ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ค.