15

I am trying to use the Mock integration to just "echo" back me the JSON body that I sent. However, I just can't get it to work. I can return any arbitrary JSON body from my "POST - Integration Response", but the request JSON is never found via $input.json('$'). I have been able to successfully echo back any query parameters.

My API has a single "/" path and a single method defined (POST). The exported yaml is here .

Any idea as to what may be going on?

user23714
  • 253
  • 3
  • 7

3 Answers3

30

I've found this to actually be possible, although a little hacky. First, in the integration request mapping template you store the body in a path parameter.

#set($context.requestOverride.path.body = $input.body)
{
  "statusCode": 200,
}

Then in the integration response mapping template you fetch it back and return it.

#set($body = $context.requestOverride.path.body)
{
  "statusCode": 200,
  "body": $body,
}

This seems to even work well with larger payloads.

matthewdaniel
  • 1,842
  • 4
  • 21
  • 35
  • 3
    This work for me, also to add to the, if you want to parse body and extract it we can use `"someVar": $util.parseJson($body).someVar,` – Tarek El-Mallah Dec 07 '20 at 03:22
11

Unfortunately this is not supported. In the mapping template for "Integration Response", $input represents the payload received from the integration response (which is empty in the case of a MOCK integration.

jackko
  • 6,998
  • 26
  • 38
1

You can set up a lambda function for echoing purposing, something like that:

exports.handler = async (event) => {
    return event;
};