3.1 ๋ณธ๋ฌธ ๊ฒŒ์‹œ์ž

์š”์ฒญ, ์ฆ‰ ์š”์ฒญ ๋ณธ๋ฌธ ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๋•Œ GET ์š”์ฒญ ์™ธ์— PUT ๋ฐ POST ์š”์ฒญ ๋„ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์ง€ ์•Š์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค .request body

์ด ํด๋ž˜์Šค์—๋Š” ์ด๋ฅผ ์œ„ํ•œ HttpRequestํŠน๋ณ„ํ•œ ๋‚ด๋ถ€ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค BodyPublisher. ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ด ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด์ง€๋งŒ ์•„๋ž˜์—์„œ ๋…ผ์˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์š”์ฒญ ๋ณธ๋ฌธ์ด ์—†๋‹ค๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ, ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.noBody())
   .build();

๊ฐ„๋‹จํ•˜๊ณ  ์•„๋ฆ„๋‹ต์Šต๋‹ˆ๋‹ค.

3.2 ofString()

๋‘ ๋ฒˆ์งธ๋กœ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ต์…˜์€ ์ผ๋ถ€ ๋ฌธ์ž์—ด์„ ์š”์ฒญ ๋ณธ๋ฌธ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "text/plain;charset=UTF-8")
   .POST(HttpRequest.BodyPublishers.ofString("Hello"))
   .build();

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ „์†ก๋˜๋Š” ๋ฌธ์ž์—ด์˜ ์ธ์ฝ”๋”ฉ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์„ ๋ณด๋‚ธ http ์„œ๋ฒ„๊ฐ€ UTF8์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .POST(HttpRequest.BodyPublishers.ofString("Hello", Charset. US-ASCII)))
   .build();

3.3 ofFile()

๋งˆ์ง€๋ง‰์œผ๋กœ POST ์š”์ฒญ ์— ํŒŒ์ผ์„ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์•„๋ฐ”ํƒ€๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„์— ์—…๋กœ๋“œ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋กœ์ปฌ ํŒŒ์ผ์„ ofFile()์ „์†กํ•  ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.Path


Path avatar = Path.of("c://avatar.jpeg");
 
HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "image/jpeg")
   .POST(HttpRequest.BodyPublishers.ofFile(avatar))
   .build();

3.4 ofByteArray()

๋˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ฐ”์ดํŠธ ์„ธํŠธ๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ผ๋ จ์˜ ๋ฐ”์ดํŠธ๋กœ ์ง๋ ฌํ™”ํ•˜๊ฑฐ๋‚˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ฑฐ๋‚˜ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ๋ฒ„ํผ๋ฅผ ๋ณด๋‚ด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค .ofByteArray().

์ด ๋ฉ”์„œ๋“œ๋Š” ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ:


byte[] data = "My Secret Message".getBytes();
byte[] dataEncripted = SuperEncriptor.encript(data);
 
HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "application/octet-stream")
   .POST(HttpRequest.BodyPublishers.ofByteArray(dataEncripted))
   .build();

3.5 ofInputStream()

๋งˆ์ง€๋ง‰์œผ๋กœ ๋งˆ์ง€๋ง‰์œผ๋กœ ํฅ๋ฏธ๋กœ์šด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” POST ์š”์ฒญInputStream ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค .

์ด๋ฅผ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค ofInputStream(). ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋…€๋Š” ๋งค์šฐ ๋˜‘๋˜‘ํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆผ์—์„œ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ๊ตฌ์„ฑํ•˜๊ณ  ์•„์ง ๊ณต๊ฐœ๋˜์ง€ ์•Š์€ POS ์š”์ฒญ ์— ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์ฒจ๋ถ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

ofInputStream()๊ฒฐ๊ณผ๋กœ ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜ํ•  ํ•จ์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค InputStream.

์˜ˆ:


byte[] data = "My Secret Message".getBytes();
//wrapping an array of bytes into a stream.
InputStream is = new ByteArrayInputStream(data);
 
HttpRequest request = HttpRequest.newBuilder()
   .uri(new URI("https://codegym.cc"))
   .headers("Content-Type", "application/octet-stream")
   .POST(HttpRequest.BodyPublishers.ofInputStream (() -> is;))
   .build();

๋‚˜๋Š” ์—ฌ๊ธฐ ์ •์›์— ์šธํƒ€๋ฆฌ๋ฅผ ์น˜๋Š” ๊ฒƒ์„ ๊ท€์ฐฎ๊ฒŒํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋‹น์‹ ์€ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์™œ ๊ทธ๋ ‡๊ฒŒ ํ–ˆ์Šต๋‹ˆ๊นŒ? ๊ฑฐ์˜ ํ•ญ์ƒ ofByteArray(). ๊ทธ๋Ÿฌ๋‚˜ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํŠนํžˆ ๋ณต์žกํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.