状況
React で TypeScript を使ってKotlinのSpring Serverに通信するために Formdata() の形を利用しました。
その時通信をしようと思ったらエラーが出てました。
415 Unsupported Error
前にこういうエラーが出たときはサヴァの中で変換してデ-タを入れたんですけど今回はそれができませんでした
だとしてこれがフロントの問題かじゃないとバックの問題かが一番わかりずらかったんです。
Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/octet-stream' is not supported]
バックにはこんなメッセージが出てて俺がタイプを間違ったっていうのを知りました。
@RequestPart FileInfo: DTO
@RequestPart File: MultipartFile
こんな形に合わせようと思ったら最初からタイプに合わないっていうのが問題でした
鯨飲
まず鯨飲を知るためには 'application/octet-stream'これが何なのかを知るべきだった。
octet-stream
上のreferenceを見て自分の考えで書きます
octet-streamはMediaTypeにあるapplicationって言うタイプにあります。
applicationとは全ての種類のバイナリデータです。
どんな形でも実行されたり解職されるデータとか特定のアップリやアップリの範囲を使わなければならないバイナリデータです。
これは一般のバイナリデータを使う時に入れるタイプです。
じゃここで問題です。
自分たちが使ってるデータタイプにはパイルとJSONだけしかいないのに何でバイナリデータが入ってバックが欲しいタイプに合わないんだろを考えました。
だとしたらパイルに問題があるかなってリアクトのコードを変えました。
const file = new Blob([inputFile], {type: 'application/x-zip-compression'});
結果何も変化もなかったんです。
これでJSONが問題だと知りました。
解決方法
一応下のコードを書いておきます。
開発が全部終わったらまた書きます。(理由も含めて)
const formData: FormData = new FormData();
const jsonblob = new Blob([JSON.stringify(fileInfo)], {
type: 'application/json',
});
formData.append('FileInfo', jsonblob);