背景
こんなAPIのControllerがあった。
(Java/Spring Boot)
@PostMapping("/hoge")
public ResponseEntity<Resource> postHoge(@RequestParam("fuga") String fuga) {
// ~~~
}
それに対してフロントエンドからaxios
を使ってこんなリクエストをした。
const requestHoge = async (fuga: string): Promise<void> => {
await axios.post('/hoge', { fuga: fuga })
}
すると、400 Bad Request
が返ってきた。
原因
APIはパラメータをリクエストパラメータ
(フォームデータ)で待っていたのに対し、
フロントエンドはリクエストボディ
で送ってしまっていた。
対処
axiosのPOSTリクエストでフォームデータを送るには、
一旦FormData
インスタンスにappend
して、
それをaxios.post
の第二引数に含めてあげる必要がある。
const requestHoge = async (fuga: string): Promise<void> => {
const formData = new FormData()
formData.append('fuga', fuga)
await axios.post('/hoge', formData)
}
結論
APIがリクエストパラメータ
かリクエストボディ
どちらを引数に取っているか
確認して実装すること。