Currently I am working on a mini project where I am designing a static website hosted in S3. There is an 'Upload' page on which users will enter name, email and mobile no and files and click on 'Upload' button to invoke the API url endpoint. I have created API gateway url endpoint "https://myAPIName.execute-api.ap-region-1.amazonaws.com/Testing/TestinLambda2" on which I am invoking a post request using XMLHTTPRequest and sending it like this -
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()}));
I am sending the data as JSON input to aws lambda Java function.
I have not done any body mapping settings in AWS API gateway.
Back in AWS side, I am using AWS Lambda Java function using POJO. Below are my classes which I got from AWS lambda documentation -
My Lambda function
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);
}
}
My 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;
}
}
My OutputClass
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()
{
}
}
When I click on the 'Upload' button I get the value on my screen as -
{"strings":"Hello null, null , null."}
This is the same value I get when I test the POST method in API gateway using 'Test' option.
If someone can point out what I am missing here, I would really appreciate.
Thank you very much!