Hem*_*ant 42 amazon-web-services aws-lambda
我编写了以下Hello World Lambda,我正在AWS上通过AWS工具包上传来执行.
public class HelloWorldLambdaHandler implements RequestHandler<String, String> {
public String handleRequest(String input, Context context) {
System.out.println("Hello World! executed with input: " + input);
return input;
}
}
Run Code Online (Sandbox Code Playgroud)
执行上面的代码时出现以下错误.知道我在这里做错了什么吗?具有此处理程序的BTW Maven项目没有任何其他类,只有依赖项是aws-lambda-java-core version 1.1.0.
Skip uploading function code since no local change is found...
Invoking function...
==================== FUNCTION OUTPUT ====================
{"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@2f7c7260; 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@2f7c7260; 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)"]}}}
Run Code Online (Sandbox Code Playgroud)
Lio*_*ort 78
出于某种原因,亚马逊无法将json反序列化为String.你会认为String会像输入参数一样通用,但正确或错误地说它不兼容.
要处理JSON,您可以使用Map或自定义POJO.
public class HelloWorldLambdaHandler {
public String handleRequest(Map<String,Object> input, Context context) {
System.out.println(input);
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
Kel*_*ehy 14
从堆栈跟踪中读取错误.它说"无法从START_OBJECT标记中反序列化java.lang.String的实例"."START_OBJECT"标记为"{".
问题只是你需要传递一个实际的String作为输入,例如"A String".这是你的json输入.不是{}.{}不是String.你不需要任何大括号,只需要一个字符串(在引号中).另一方面,{}是一个有效的Person对象,所以一旦你改变它就可以处理Person作为输入.
小智 7
我在测试中尝试使用以下值:
"TestInput"
Run Code Online (Sandbox Code Playgroud)
代替 :
{ Input : "TestInput"}
Run Code Online (Sandbox Code Playgroud)
它似乎工作得很好.