๋ฐฑ๊ทธ๋ผ์ด๋ ๋ก๊ทธ์ธ ํ ๊ธ์ ์์ฑํ๋๋ฐ ์ผ๋ถ ์ค๋ช
์๋ ์ฝ๋๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ค๋ํซ์ ์ฝ์
ํ์ต๋๋ค.
๊ฒฐ๊ณผ ์ ์ฅ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ค๋ฅ๊ฐ ๋ณด๊ณ ๋ ๊ฒ์ผ๋ก ํ์ธ๋์์ต๋๋ค.
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: Unable to create temporary file, C:\Users\pys1714\AppData\Local\Temp\Attr_7771572786958116046_{"cid":4,"title":
์ค๋ฅ๋ฅผ ๋ณด๊ณ ์ฒ์์๋ ์ ์ฅ ์ ๋ต์ด ํ์ผ๋ก ์บ์ฑํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ๋ฐ์ดํฐ์ ๊ธธ์ด์ ์ ํ์ด ์์ด ํ
์คํธ๋ฅผ ์ญ์ ํ๊ณ ๋๋ฒ๊ทธํ๊ธฐ ์์ํ์ต๋๋ค. ์์ ํ์ผ์ด ์์ฑ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋์ ํ์ผ์ ๋ง๋ ์ด์ ๊ฐ ์๋๊น ํ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
์ค๋ฅ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ๋ฉ์๋ io.netty.handler.codec.http.multipart.HttpPostRequestDecoder.parseBodyAttributes()
์ฐพ์ผ์ญ์์ค.
๊ทธ ๋ฐฉ๋ฒ์ ์ง์ผ๋ณธ ๊ฒฐ๊ณผ, netty๋ ๋ด๊ฐ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํ๋ํ๋ ์ผ์ข ์ ํ๋จ์ ๋ด๋ฆฌ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
switch (currentStatus) {
case DISPOSITION:// search '='
// other code
break;
case FIELD:// search '&' or end of line
// other code
break;
default:
// just stop
sao.setReadPosition(0);
contRead = false;
break loop;
}
๋๊ธ์ "=" ๋ฐ "&" ๋ ๋ฌธ์๋ฅผ ์ฟผ๋ฆฌํ๋ผ๋ ๋ฉ์์ง๊ฐ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์๋ํ๋ฉด ๋ด ๊ธฐ์ฌ์ "="๋ง ํฌํจ๋๊ณ ์ ์ฅ์ ํด๋ฆญํ๋ฉด ์์๋๋ก ์ค๋ฅ๊ฐ ๋ณด๊ณ ๋ฉ๋๋ค.
io.netty.handler.codec.http.multipart.HttpPostRequestDecoder$ErrorDataDecoderException: java.io.IOException: ๆไปถๅใ็ฎๅฝๅๆๅทๆ ่ฏญๆณไธๆญฃ็กฎใ
"&"๋ฅผ ๋ค์ ์๋ํ๊ณ ๊ทธ๋ ๊ฒ ํ์ต๋๋ค.
์ค๋ฅ๋ netty์ ๊ฐ์ธ ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์์ง ๊ตฌ์ฒด์ ์ธ ํด๊ฒฐ์ฑ ์ด ์์ต๋๋ค.
ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๋ค. https://juejin.im/post/5c63a028f265da2d9262c662
๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์,
src/main/java ์๋์ ํจํค์ง ์์ฑ: io.netty.handler.codec.http.multipart
netty-codec-http-4.1.30.Final.jar์ ํด๋นํ๋ ์์ค ์ฝ๋์์ HttpPostStandardRequestDecoder.java
์ฐพ๊ธฐ
์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ๋ง๋ ํจํค์ง์ ์์ค ์ฝ๋๋ฅผ ๋ณต์ฌํฉ๋๋ค.
parseBodyAttributes()
์ฐพ์ ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ค์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
return;
}
ํ , ํ์ฐธ์ ๊ฒ์ํ ๊ฒฐ๊ณผ, Blade์ ๋งจ ์๋ ๋ ์ด์ด์์ ์ค๋ฅ๋ฅผ ๋ณด๊ณ ํ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ง์์ด ๋ถ์์ก๋ค. ๋จผ์ ๋ฐฉ๋ฒ์ ์๋ํ์ญ์์ค.๊ฐ์ฌ
๋ฐฉ๋ฒ์ ๊ฐ์ฌํฉ๋๋ค๋ง, ์ฝ๋๋ฅผ ์ฝ์ด๋ณด๋ ์๋ฆฌ๋ฅผ ์ดํดํ์ง ๋ชปํ์ต๋๋ค. .๋ฌด์ง๋ฅผ ํํํ๋ค
Blade netty์ ์์กด์ฑ ์
๊ทธ๋ ์ด๋
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec</artifactId>
<version>4.1.31.Final</version>
</dependency>
Blade netty์ ์์กด์ฑ ์ ๊ทธ๋ ์ด๋
<dependency> <groupId>io.netty</groupId> <artifactId>netty-codec</artifactId> <version>4.1.31.Final</version> </dependency>
์๋ํ์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค. . .
ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๋ค. https://juejin.im/post/5c63a028f265da2d9262c662
๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์,
- src/main/java ์๋์ ํจํค์ง ์์ฑ:
io.netty.handler.codec.http.multipart
- netty-codec-http-4.1.30.Final.jar์ ํด๋นํ๋ ์์ค ์ฝ๋์์
HttpPostStandardRequestDecoder.java
์ฐพ๊ธฐ- ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ๋ง๋ ํจํค์ง์ ์์ค ์ฝ๋๋ฅผ ๋ณต์ฌํฉ๋๋ค.
parseBodyAttributes()
์ฐพ์ ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ค์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){ return; }
- maven ํจํค์ง ๋ช ๋ น์ ์ฌ์ฉํ์ฌ tale ํจํค์ง
if(!this.request.headers().get("Content-Type").startsWith(APPLICATION_X_WWW_FORM_URLENCODED)){
return;
}
์ด ๋งค๊ฐ ๋ณ์๋ โ
if(!this.request.headers().get("Content-Type").startsWith("application/x-www-form-urlencoded")){
return;
}
์๋ฒฝํ ์๋ฃจ์
๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํด๊ฒฐ์ฑ ์ ์ฐพ์์ต๋๋ค. https://juejin.im/post/5c63a028f265da2d9262c662
๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ์,
src/main/java ์๋์ ํจํค์ง ์์ฑ:
io.netty.handler.codec.http.multipart
netty-codec-http-4.1.30.Final.jar์ ํด๋นํ๋ ์์ค ์ฝ๋์์
HttpPostStandardRequestDecoder.java
์ฐพ๊ธฐ์ฒซ ๋ฒ์งธ ๋จ๊ณ์์ ๋ง๋ ํจํค์ง์ ์์ค ์ฝ๋๋ฅผ ๋ณต์ฌํฉ๋๋ค.
parseBodyAttributes()
์ฐพ์ ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ค์ ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.