Amazon web services 映射模板的默认内容类型

Amazon web services 映射模板的默认内容类型,amazon-web-services,content-type,aws-lambda,aws-api-gateway,Amazon Web Services,Content Type,Aws Lambda,Aws Api Gateway,不幸的是,我正在为我的项目与一个不符合任何标准的数据提供商合作,因此在请求的头中没有指定任何内容类型。实际上它是指定的,但是使用不同的键,然后是内容类型 POST请求的负载是xml格式的,所以据我所知,我们需要使用映射模板将负载包装在json对象中。当我们将内容类型指定为集成请求部分中的设置类型之一时,所有这些都非常有效 现在我的理解是,如果请求头中没有指定内容类型,那么它应该默认为“application/json”,并执行与该类型关联的映射模板。在本例中,它的行为类似于忽略映射模板,这反过来

不幸的是,我正在为我的项目与一个不符合任何标准的数据提供商合作,因此在请求的头中没有指定任何内容类型。实际上它是指定的,但是使用不同的键,然后是内容类型

POST请求的负载是xml格式的,所以据我所知,我们需要使用映射模板将负载包装在json对象中。当我们将内容类型指定为集成请求部分中的设置类型之一时,所有这些都非常有效

现在我的理解是,如果请求头中没有指定内容类型,那么它应该默认为“application/json”,并执行与该类型关联的映射模板。在本例中,它的行为类似于忽略映射模板,这反过来会导致返回以下错误:

{“类型”:“用户”,“消息”:“无法将请求正文解析为json。”}

请注意,请求被发送到AWS Lambda进行处理

有什么办法让它工作吗


编辑:我已确认,如果未在标题中设置内容类型,则默认值为“application/json”。在这种情况下,我假设我遇到的是一个bug。

如果您不太依赖映射模板,则始终可以使用lambda代理集成:


这有效地将解析主体的责任转移回lambda函数。您的
事件
对象现在将包含一个
主体
字符串-因此,不管标题是什么,api gw都将简单地将主体传递给您的函数来处理。这将允许您将正文解析为XML,即使内容类型标头丢失/无效。

如果默认内容类型为application/json,是否意味着网关需要json,并拒绝请求,因为负载不是这样的?是和否。这与调用的映射模板无关,它只是指定应该调用哪一个。至少应调用映射模板。如果我显式地将内容类型设置为application/json,那么将调用映射模板,xml内容将被很好地切割成一个json对象,一切都很好。问题在于,当该内容类型丢失时,不会调用默认值,默认值应为applicationon/json。AWS在其论坛上的代表已经确认应该调用默认值。看起来这可能是AWS中的错误。默认的
内容类型可以是
“*”
。也尝试过了。没有幸福的结局!有什么新的想法吗?