我想在我的靜態網站上託管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