2017-08-11 33 views
0

我怀疑这可能隐藏了另一个问题,但不确定它是什么 - 我试图使用AWS控制台测试一个小的Lambda函数。使用Java和AWS Lambda函数解析JSON错误

public class ApplicationRunner implements RequestHandler<String, String> { 

    static final Logger logger = Logger.getLogger(ApplicationRunner.class); 

    @Override 
    public String handleRequest(String input, Context context) { 
    //code 

} 
} 

我收到的错误是:

{ 
    "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: [email protected]; 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: [email protected]; 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)" 
     ] 
    } 
    } 
} 

谁能帮助?

谢谢。

+0

你的代码在我的水晶球中有点朦胧。我不能正确阅读它。你介意在这里发布吗? – Michael

+0

@迈克尔,考虑你的愿望。 – null

+0

您可以将输入发布到此Lambda(事件数据)吗? – jarmod

回答

1

您有:

  • rawData:数据是
  • rewrittenData发送到您的lambda函数:应用变换模板
  • jsonData数据后:的rewriteData
JSON的解析结果

签名handleRequest(String input, Context context)表示您的inputjsonData ,而这个JSON对象是一个字符串。你是否将一个json字符串传递给你的lambda? 99.99%不是,你发送的是一个对象,所以你得到了预期的错误信息。

你想要的是扩展类RequestStreamHandler和与签名重写功能:

@Override 
public void handleRequest(final InputStream input, final OutputStream output, final Context context) 

现在input是你rewrittenData,这是最有可能同rawData

+0

谢谢! :D非常有帮助 – null