java - 从 Java 中的 Lambda 函数调用外部 Rest API

标签 java rest aws-lambda amazon-lex

我正在尝试编写一个 lambda 函数,它从 lex 输入中获取信息,并调用 rest api,将该信息作为参数传递,返回一个字符串,然后我想将该字符串作为响应发送给 lex。它在 eclipse 中运行时按预期工作,但是当我将 jar 上传到 amazon lambda 时,它没有给出任何错误,但输出字符串为空。

public class LambdaFunctionHandler implements RequestHandler<Map<String,Object>, Object> {


@Override
public Object handleRequest(Map<String,Object> input, Context context) {

    ValidationHook.LexRequest lexRequest= LexRequestFactory.createLexRequest(input);
    String orgbotcommand = lexRequest.getCommand()+"%20"+lexRequest.getType()+"%20"+lexRequest.getNew_variable();
    lexRequest.setOrgbotcommand(orgbotcommand);

    try {
        URL url = new URL("http://localhost:8080/mindtuit/execute?command="+orgbotcommand);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");

        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : "
                    + conn.getResponseCode());
        }

        BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));

        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
            lexRequest.setResponse(output);

        }
        System.out.println(lexRequest.getResponse());

        conn.disconnect();

      } catch (MalformedURLException e) {

        e.printStackTrace();

      } catch (IOException e) {

        e.printStackTrace();

      }



    String content = String.format("command recieved by %s is %s,response is %s ",lexRequest.getBotName(),lexRequest.getOrgbotcommand(),lexRequest.getResponse());

    Message message = new Message("PlainText",content);
    DialogAction dialogAction = new DialogAction("Close", "Fulfilled", message );
    System.out.println(dialogAction);

    return new LexRespond(dialogAction);
}

最佳答案

使用 ngrok 并为应用程序运行端口生成一个 http url。

关于java - 从 Java 中的 Lambda 函数调用外部 Rest API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48849608/

相关文章:

rest - 在 Grails 中发送带有 JSON 负载的 HTTP POST 的最佳方式

node.js - 编写 AWS Lambda Nodejs api 的最佳实践或指南

Java注解基础

rest - SOAP 与 REST 和 WSDL

java - 手写自定义形状识别

rest - 什么是在Logstash中提取Rest API的正确方法

amazon-web-services - Amazon SNS 消息的预期 SLA(服务级别协议(protocol))是什么?

aws-lambda - Lambda Alex Skill session 属性未定义

java - 为什么 Java 会提示未初始化的变量,即使导致其初始化的所有可能路径都已被处理?

Java服务器在需要时监听socket