我已经做了一个Lambda函数,我想通过URL在API网关的帮助下访问它。
我已经全部设置好了,我还在API网关中创建了一个application/json
主体映射模板,如下所示:
{
"input": "$input.params('input')",
}
然后触发HTTP GET请求,如下所示:
https://dmquh95ckh.execute-api.eu-west-1.amazonaws.com/prod/OtoTestFunction?input=test
public class LambdaFunctionHandler implements RequestHandler<String, String> {
@Override
public String handleRequest(String input, Context context) {
context.getLogger().log("Input: " + input);
return "Test completed."+input;
}
}
这是完整的错误消息:
{
"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@68c4039c; 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@68c4039c; 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:835)",
"com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:59)",
"com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)",
"com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:1441)",
"com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1047)"
]
}
}
}
当我将输入参数的类型从String更改为Object时,它在所有场景中都对我起作用。
public class LambdaFunctionHandler implements RequestHandler<Object, String> {
@Override
public String handleRequest(Object input, Context context) {
String data= input != null ? input.toString() : "{}";
context.getLogger().log("Input: " + data);
return "Test completed."+data;
}
}
*
在研究了几个Lambda实现之后,我意识到输入参数只是一个JSON结构的纯字符串表示或一个map
if(input instanceof String)
{
String lambdaInputJsonStr = (String)input;
}
else if(input instanceof Map)
{
String lambdaInputJsonStr = gson.toJson((Map)input);
}
例外情况: 套接字处理程序 我相信当JSON被解析为WorkstationRequest对象时会出现异常,原因是下面的项。这是套接字处理程序: 我不知道如何开始调试它。堆栈跟踪从未触及我的应用程序。我正在使用部署我的.jar,并使用执行它
我收到下面的错误信息,请有人帮助或建议如何最好地调试这个。 我正在尝试从REst API调用反序列化Products对象。在我添加代码反序列化Price子类之前,代码一直运行良好。如下所示, 我的Price pojo如下所示, 我编写了一个Junit测试来尝试并模拟该错误,
我编写了一个微服务来对API进行HTTP调用。代码如下所示。 当我使用构建它时,它运行得非常完美。然而,当我将其作为SpringBoot应用程序运行时,我会得到以下错误:
我尝试声明为String或List,但没有成功。知道吗? }
我想从angular 8前端向spring boot API发送一个JSON对象。我是这些框架的新手,我有点迷茫。 错误: “无法将的实例从START_OBJECT标记反序列化到[源:(String)”{“coordines”:[{“lat”:76.00542202728906,“lng”:-71.76493508359451},{“lat”:62.96921913888247,“lng”:-11
我第一次遇到ObjectMapper与string.class一起使用,我尝试将json作为string提供,得到了JSONMappingException。你能帮我理解一下为什么吗? 答复: 线程“Main”Com.FasterXml.Jackson.DataBind.JsonMappingException异常:无法反序列化位于[Source:{“Response”:“Success”}处的S