2017-12-10 17 views
0

現在、私はS3でホストされている静的なWebサイトを設計しているミニプロジェクトに取り組んでいます。ユーザーが名前、メール、モバイル番号、ファイルを入力し、[アップロード]ボタンをクリックしてAPI URLエンドポイントを呼び出す[アップロード]ページがあります。私はXMLHTTPRequestをを使用してPOSTリクエストを呼び出すと、このようにそれを送っていた上のAPIゲートウェイURLエンドポイント「https://myAPIName.execute-api.ap-region-1.amazonaws.com/Testing/TestinLambda2」を作成している -AWS Lambda POJOとLambda関数を使用したJAVA関数は 'null'を返します

xhttp.open("POST", "https://myAPIName.execute-api.ap-region-1.amazonaws.com/Testing/TestinLambda2", true); 
xhttp.send(JSON.stringify({Name:$('#Name').val(),Email:$('#email').val(),MobileNo:$('#mno').val()})); 

私はAWSラムダのJava関数にJSON入力などのデータを送信しています。

私はAWS APIゲートウェイでボディマッピング設定を行っていません。

AWS側では、私はAWS Lambda Java関数をPOJOを使用して使用しています。以下は、私がAWSラムダのドキュメントから得た私のクラスである -

public class OutputClass { 

    String greetings; 

    public String getStrings() 
    { 
     return greetings; 
    } 

    public void setString() 
    { 
     this.greetings = greetings; 
    } 

    public OutputClass(String greetings) 
    { 
     this.greetings = greetings; 
    } 

    public OutputClass() 
    { 

    } 
} 

私はをクリックして

マイラムダ関数

package com.amazonaws.lambda.demo; 

import java.util.Map; 

import com.amazonaws.services.lambda.runtime.Context; 
import com.amazonaws.services.lambda.runtime.RequestHandler; 

public class FirstLambda implements RequestHandler<InputClass, OutputClass> { 

    @Override 
    public OutputClass handleRequest(InputClass input, Context context) { 
     String greetingString = String.format("Hello %s, %s , %s.", input.getName(), input.getEmail(), input.getMobile()); 
     //String greetingString = String.format("Hello"); 
     return new OutputClass(greetingString); 
    } 

} 

マイInputClass

package com.amazonaws.lambda.demo; 

public class InputClass { 

    String Name; 
    String Email; 
    String MobileNo; 

    public String getName(){ 
     return this.Name; 
    } 

    public String getEmail(){ 
     return this.Email; 
    } 

    public String getMobile(){ 
     return this.MobileNo; 
    } 

    public void setName(String Name){ 
     this.Name = Name; 
    } 

    public void setEmail(String Email){ 
     this.Email = Email; 
    } 

    public void setMobile(String Mobile){ 
     this.MobileNo = Mobile; 
    } 

    public InputClass(){ 

    } 

    public InputClass(String Name, String Email, String Mobile){ 
     this.Name = Name; 
     this.Email = Email; 
     this.MobileNo = Mobile; 
    } 
} 

私OutputClassは "アップロードボタンをクリックします。私の画面上の値は -

{"strings":"Hello null, null , null."} 

これは、[テスト]オプションを使用してAPIゲートウェイでPOSTメソッドをテストするときと同じ値です。

誰かが私がここで紛失していることを指摘できれば、本当に感謝します。

ありがとうございました!

答えて

0

簡単にするためにAPIゲートウェイの代わりにラムダテストイベントを使用して提供したクラスでこれをテストしましたが、この修正はJavaScriptにも引き継がれます。

コード内でクラス変数の名前をどのように指定しても、JSONのパラメータはgetters/setterの名前に従わなければならないようです。コード内のプロパティを修正するだけで修正できます。これは、パッケージの外部からクラス変数にアクセスできないため意味があります。したがって、ミューテーターメソッドの名前に従わなければなりません。

xhttp.open("POST", "https://myAPIName.execute-api.ap-region-1.amazonaws.com/Testing/TestinLambda2", true); 
xhttp.send(JSON.stringify({name: $('#Name').val(), email: $('#email').val(), mobile: $('#mno').val()})); 

次ペイロード:

{ 
    "Name": "Gerard", 
    "Email": "[email protected]", 
    "MobileNo": "8675309" 
} 

このペイロード

{ 
    "name": "Gerard", 
    "email": "[email protected]", 
    "mobile": "8675309" 
} 

は、の期待される応答を生成しながら

{"strings":"Hello null, null , null."} 

を生成:

{"strings": "Hello Gerard, [email protected] , "8675309"."} 
+0

こんにちはジェラード、私は名前、電子メールとmobilenoで試してみます。 javascriptの私のキーはName、Email、MobileNoで、私はjsonペイロードで同じキーを持っていました。それは何か事件に関連していますか? –

+0

'mobileno'を使わないでください。プロパティ名はgetterとsetterに基づいて生成され、プロパティ自体ではないと思います(あなたのメソッドは' getMobileNo'ではなく 'getMobile'という名前です)。舞台裏のラムダは解析に[Jackson](https://github.com/FasterXML/jackson)を使用しています。おそらく_ProperCase_ではなく_camelCase_にケースを正規化しています。 – Gerard

+0

Gerardありがとうございます。私もそれを試みます。 –

関連する問題