我有一个Spring启动应用程序与GET方法如下。此方法的输入参数为String,它与路径变量{userId}映射。
@GetMapping("/users/{userId}")
public String get(@PathVariable ("userId") String userId) {
return userId;
}
我创建了AWS lambda函数并上传了我的Spring BootJAR。在传递字符串示例“userId1”后,我能够使用测试事件测试lambda函数。Lambda函数运行良好。
使用API网关,创建API,定义资源和GET方法。URL如下所示:
/users/{userId} - GET - Integration Request
此外,遵循以下步骤来定义映射模板。
>
添加了以下模板以将userId映射到Lambda输入
{"userId":"$input.params('userId')"}
当我测试我的API时,它给出了以下异常。我不确定应该如何定义映射模板,使其只接受字符串而不接受JSON。因为我的Lambda函数和相应的实现方法只接受字符串。提前谢谢你的帮助。
{
"errorMessage": "An error occurred during JSON parsing",
"errorType": "java.lang.RuntimeException",
"stackTrace": [],
"cause": {
"errorMessage": "com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: lambdainternal.util.NativeMemoryAsInputStream@69b2283a; line: 1, column: 1]",
"errorType": "java.io.UncheckedIOException",
"stackTrace": [],
"cause": {
"errorMessage": "Can not deserialize instance of java.lang.String out of START_OBJECT token\n at [Source: lambdainternal.util.NativeMemoryAsInputStream@69b2283a; line: 1, column: 1]",
"errorType": "com.fasterxml.jackson.databind.JsonMappingException",
"stackTrace": [
"com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)",
"com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:857)",
"com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:62)",
"com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)",
"com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1511)",
"com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1102)"
]
}
}
}
我的问题通过简单的改变就解决了。正如我在上述问题中提到的,我遵循以下步骤。
>
选择选项:未定义模板时(推荐)
添加了一个映射模板:application/json
添加了以下模板以将userId映射到Lambda输入
{"userId":"$input.params('userId')"}
在最后一步#4中,我将下面的JSON格式替换为字符串格式。
{ "userId": "$input.params('userId')" }
在下面,它起了作用。我的API可以将String参数正确地传递给lambda函数,该函数有一个带有String类型的单一输入的handler方法。
$input.params('userId')
我认为出现问题是因为您正在映射类似于以下内容的JSON:
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": {
"sub_key1": "value4"
}
}
它包含一个键key4
,值为和JSON对象。当您尝试反序列化此元素时,它将无法直接工作,因为它看到的是JSON\u对象
,而不是字符串。
您需要创建一个类,如下所示:
public class Name { // the name doesn't matter
@JsonProperty("sub_key1")
private String sub_key1;
// getter and setter
}
来解决你的问题。
当我发送一个带有POST请求的正文时,我的模板映射似乎被有效负载覆盖了。 我有一个调用Lambda函数的API网关资源。Lambda函数很简单,它只是回显它接收到的内容。 这个名为echo的Lambda函数通过POST调用Lambda函数。POST方法有一个集成请求映射模板(直接来自文档): 当我在没有尸体的情况下提出请求时,我会得到我期望的答复: 但是,当我用主体发出请求时,模板映射不再工作:
我有一个API阶段没有使用“Lambda代理集成”,它有一个Lambda函数传递一个错误。 在映射模板中,我有以下内容: 有可能做我想做的事吗?我找不到$util.parsejson(即stringify)的反向。 谢谢!
问题内容: 我的印象是,使用x-www-form-urlencoded规范的POSTS应该在帖子正文中发送URL编码的参数字符串。但是,当我这样做时 接收端的请求主体如下所示: 但我期望得到这个 我如何获得请求以第二种形式发送数据? 问题答案: 获得JSON的原因是因为您显式调用以生成JSON字符串。只是不这样做,您就不会得到JSON字符串。换句话说,将第一行更改为: 正如文档所解释的,如果将di
解决方案:将包重命名为,必须是主包的子包(包含main方法的子包) 我已经讨论过以下主题,但似乎没有一个对我有效: RequestMapping导致404错误,添加了regex(到Rest控制器,到方法),但仍然不会映射它。 Spring@RequestMapping,404 error在我的pom.xml中添加了,尽管我找不到更改它的路径(我怀疑可能存在问题,但我不确定)。 请求映射返回错误40
我是Mapstruct的新手。我有一个Word对象,它包含一个字符串值和一组它自己,我想把它映射到WordDTO,它包含一个值和一组字符串值。我不知道怎么做。正如我在注释中所说,mapstruct不能映射两个对象是有道理的,但如果它有帮助,我将错误放在下面: 我为映射实现了这个接口: 谢谢你的帮助。