1

APIゲートウェイに文字列(xmlから文字列)を返すラムダ関数があります。今すぐAPIゲートウェイが文字列を返しますが、有効なXMLではありません。 コンテンツタイプをapplication/xmlに設定しました。AWS APIゲートウェイreturn XML

XMLは次のようになります。

"<TEST xmlns:ns0=\"https://www.w3.org/2001/XMLSchema-instance\" version=\"3.0\" >\n <InLine>\n <tag1>valuetag1</tag1>\n</InLine>\n \n</TEST>" 

が、私はこれをどのように修正することができますか?

+0

あなたのXML文字列がラムダによってJSON文字列としてシリアル化されているようです。それは(https://forums.aws.amazon.com/thread.jspa?messageID=649836のように)文字列を抽出するための出力マッピングテンプレートが必要です。すでに物事がある場合は、コードを提示してください。 –

答えて

2

デフォルトでは、API GatewayとLambdaはJSONデータを要求します。間違いなくXMLデータを返すことは可能ですが、ラムダ統合をどのように設定したかによって、異なる設定が必要になります。

コメントに記載されているforum threadは、マッピングテンプレートとの標準的なラムダ統合を使用している場合に適用されます。ラムダプロキシ統合を使用している場合は、XMLをエスケープして、documentationで定義されているように、返されたJSONペイロードの中に埋め込む必要があります。

0

フォーラムスレッドは便利です。また、貼り付けた文字列は、マッピングで返すことができたとしても、有効なXMLではないことに注意してください。

とにかく私は同様の問題を抱えていましたが、これは私がそれを解決した方法です(上記フォーラムリンクディスカッションと非常によく似ています)。

  1. ラムダがXMLに変換できるものを返すようにしてください。私は、JSONでの実際の応答XML文字列をラップしている

def lambda_handler(event, context): resp = {"body" : "<FooResult xmlns='http://someorg.com/xml/1.0'><Message>All is well</Message></FooResult>"} return resp

注:お使いのラムダはPythonであれば、あなたのハンドラは、このようなものである可能性があります。このjson要素の鍵は "body"です。そのキーの値は、二重引用符で囲まれた有効なXML文字列です。

  1. APIゲートウェイのインテグレーションレスポンスで応答ボディマッピングテンプレートを追加します。これは、テンプレートの内容でなければなりません:

#set($inputRoot = $input.path('$')) $inputRoot.body

このテンプレートは、あなたのJSONの重要な「身体」に有効なXML値を返します。

これで、メソッド応答セクションにContent-Typeヘッダーとapplication/xmlの応答本文を追加するだけで、有効なXMLを取得する必要があります。

XMLを受け入れるようにクライアントのacceptヘッダーを設定することを忘れないでください。 Cheers

関連する問題