Amazon API Gateway にて作成した POST メソッドで、リクエストボディの全角文字に対する文字化けを解消する方法を教えてください

2022.04.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

Amazon API Gateway にて作成した POST メソッドでリクエストを実行したところエラーになりました。

当該ログを調べたところ、リクエストボディの全角文字が文字化けとなっていることを確認しました。

正常なリクエストにするため、この文字化けの解消方法を教えてください。

どう対応すればいいの?

Amazon API Gateway は、API の binaryMediaTypes、クライアントリクエストのヘッダー、統合の contentHandling プロパティの組み合わせによって、API Gateway がペイロードをエンコードする方法が決まります。

API の binaryMediaTypes、クライアントリクエストのヘッダー、統合の contentHandling プロパティの組み合わせによって、API Gateway がペイロードをエンコードする方法が決まります。

例えば、binaryMediaTypes および contentHandling の設定を実施していない(未定義である)場合、Amazon API Gateway は、上記の参考ドキュメントに従って UTF-8 でエンコードを行います。

そのため、文字コード が UTF-8 ではないものが UTF-8 でエンコードされた結果、文字化けの発生が起こりえます。

上記のケースの場合、文字化けが発生した際のリクエストの Content-Type ヘッダーの値として指定している内容を、当該 API にて binaryMediaTypes として設定することで、UTF-8 でのエンコードが行われないため、文字化けが解消されるかご確認ください。

なお、詳細な設定方法については、下記のドキュメントをご参照ください。

補足

統合パススルーの設定において、リクエスト本文のパススルーを「テンプレートが定義されていない場合」で、Content-Type に何も設定しない状況であれば、リクエスト本文はエンドポイントにスルーされますか?

統合パススルーの設定において、「テンプレートが定義されていない場合」を選択しつつ、マッピングテンプレートを定義していない場合、マッピングテンプレートによる変換は行われません。

しかしながら、マッピングテンプレートによる変換は行われないものの、上述した『API Gateway でのコンテンツタイプの変換』のドキュメントに記載されている変換は発生しますので、ご留意いただけますと幸いです。

参考資料