2016-05-11 2 views
5

からjava.lang.Stringのインスタンスを逆シリアル化できませんラムダ関数を作成しましたが、APIゲートウェイの助けを借りてURL経由でアクセスしたいと思います。AWS START_OBJECT

私はそれをすべて設定している、私はこのように見ているAPIゲートウェイにapplication/jsonボディマッピングテンプレートをも作成しました:

{ 
    "input": "$input.params('input')", 
} 

そして、私はこのようになりますHTTP GETリクエストトリガしています:

https://dmquh95ckh.execute-api.eu-west-1.amazonaws.com/prod/OtoTestFunction?input=test 

私のJavaハンドラクラスは、次のようになります。

public class LambdaFunctionHandler implements RequestHandler<String, String> { 

    @Override 
    public String handleRequest(String input, Context context) { 
     context.getLogger().log("Input: " + input); 
     return "Test completed."+input; 
    } 
} 

Aこれは完全なエラーメッセージです。

{ 
    "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: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)" 
     ] 
    } 
    } 
} 
+0

は、あなたのJava関数が呼び出される前に、この起こっている、または後に?あなたの "入力:"ログメッセージがログに表示されますか? –

答えて

4

これは、ラムダの逆シリアル化中のエラーメッセージです。

APIゲートウェイマッピングテンプレートがJSONオブジェクトを送信していますが、ハンドラが文字列を要求しています。 APIゲートウェイから生の文字列を送信するか、テンプレート出力に対応するPOJOを使用するようにハンドラを更新してください。

すなわち

public class MyPojo { 
    private String input; 
    public String getInput() { return input; } 
    public void setInput(String input) { this.input = input; } 
} 

参照: http://docs.aws.amazon.com/lambda/latest/dg/java-programming-model-req-resp.html

+0

「APIゲートウェイから生の文字列を送信する」:これはどのように行われますか?どの「テンプレート出力」がその答えを参照していますか? – Harald

関連する問題