I would to get AWS Api Gateway Gateway Response to return one of the input body properties, this can be done in a workaround during integration response.
APIGW integration response with input body, workaround (This is working and is an example of something I thought I could do in Gateway responses.)
First set the override in request template:
<code>{
"application/json": """
#set($context.requestOverride.path.body = $input.body)
#set( $body = $input.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"DeliveryStreamName": "{delivery_stream_name}",
"Record": {{
"Data": $body"
}}
}}""".format(
delivery_stream_name=delivery_stream_name,
),
}
</code>
<code>{
"application/json": """
#set($context.requestOverride.path.body = $input.body)
#set( $body = $input.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"DeliveryStreamName": "{delivery_stream_name}",
"Record": {{
"Data": $body"
}}
}}""".format(
delivery_stream_name=delivery_stream_name,
),
}
</code>
{
"application/json": """
#set($context.requestOverride.path.body = $input.body)
#set( $body = $input.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"DeliveryStreamName": "{delivery_stream_name}",
"Record": {{
"Data": $body"
}}
}}""".format(
delivery_stream_name=delivery_stream_name,
),
}
Then in response template:
<code>{
"statusCode": "200",
"responseTemplates": {
"application/json": """
#set( $body = $context.requestOverride.path.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"key": {pks},
"rowAccepted": true,
"importTime": "$context.requestTimeEpoch"
}}""".format(
pks=json.dumps(
{
x: f"$bodyobj.{x}"
for x in ['colA', 'colB']
},
indent=4,
)
),
},
}
</code>
<code>{
"statusCode": "200",
"responseTemplates": {
"application/json": """
#set( $body = $context.requestOverride.path.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"key": {pks},
"rowAccepted": true,
"importTime": "$context.requestTimeEpoch"
}}""".format(
pks=json.dumps(
{
x: f"$bodyobj.{x}"
for x in ['colA', 'colB']
},
indent=4,
)
),
},
}
</code>
{
"statusCode": "200",
"responseTemplates": {
"application/json": """
#set( $body = $context.requestOverride.path.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"key": {pks},
"rowAccepted": true,
"importTime": "$context.requestTimeEpoch"
}}""".format(
pks=json.dumps(
{
x: f"$bodyobj.{x}"
for x in ['colA', 'colB']
},
indent=4,
)
),
},
}
What I am trying to do in my current Gateway Response. I attempted the $context.requestOverride
but I cannot seem to access this in the gateway response.
<code>
{
"statusCode": "400",
"responseTemplates": {
"application/json": """
#set( $body = $context.requestOverride.path.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"key": {pks},
"rowAccepted": false,
"errors": [
$context.error.responseType,
$context.error.validationErrorString
]
}}""".format(
pks=json.dumps(
{
x: f"$bodyobj.{x}"
for x in ['colA','colB']
},
indent=4,
)
),
},
</code>
<code>
{
"statusCode": "400",
"responseTemplates": {
"application/json": """
#set( $body = $context.requestOverride.path.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"key": {pks},
"rowAccepted": false,
"errors": [
$context.error.responseType,
$context.error.validationErrorString
]
}}""".format(
pks=json.dumps(
{
x: f"$bodyobj.{x}"
for x in ['colA','colB']
},
indent=4,
)
),
},
</code>
{
"statusCode": "400",
"responseTemplates": {
"application/json": """
#set( $body = $context.requestOverride.path.body )
#set( $bodyobj = $util.parseJson($body) )
#set( $quote = '"' )
{{
"key": {pks},
"rowAccepted": false,
"errors": [
$context.error.responseType,
$context.error.validationErrorString
]
}}""".format(
pks=json.dumps(
{
x: f"$bodyobj.{x}"
for x in ['colA','colB']
},
indent=4,
)
),
},