我想在我的静态网站上托管Amazon S3 & CloudFront上的联系表单。我决定使用Java为AWS Lambda编写简单的程序,并通过AWS API Gateway从我的静态网站调用它。为什么在我的AWS lambda函数中没有调用afterResponse方法?
这里是我LambdaHandler类:
public class LambdaHandler extends RequestHandler2 {
FormData formData = new FormData();
public LambdaResponse handleRequest(FormData formData, Context context) {
this.formData = formData;
System.out.println(String.format("Hello %s.", formData.getName()));
Map<String, String> headers = new HashMap<>();
headers.put("Access-Control-Allow-Origin", "*");
headers.put("Access-Control-Allow-Headers", "Content-Type");
return new LambdaResponse(200, headers, "{}");
}
@Override
public void afterResponse(Request<?> request, Response<?> response) {
System.out.println("afterResponse");
try {
sendMail(formData.getName(), formData.getEmail(), formData.getCompany(), formData.getPhone(), formData.getSubject(), formData.getMessage());
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
的问题是,afterResponse
方法不会被调用。我需要在返回响应后发送电子邮件,因为发送电子邮件(通过Amazon SES BTW)可能需要13-18秒(特别是在未使用某段时间后调用lambda函数时),而且我不希望用户等待那么久。
在我的AWS LAMBDA配置我有com.example.emailservice.LambdaHandler::handleRequest
的处理程序。
我建议使用@Override批注,以确保该方法真正被覆盖。 –
谢谢,但仍然无法正常工作。 – Defozo
你确定它没有失败吗?添加一个'afterError'。 – teppic