【问题标题】:Aws Lambda java function alwasys returns 200Aws Lambda java 函数总是返回 200
【发布时间】:2020-01-08 15:18:07
【问题描述】:

我是使用 Java 构建一个功能的 aws lambda,还使用集成响应来处理自定义映射。这是 lambda 的代码。

    @Override
    public LoginResponse handleRequest(LoginRequest request, Context ctx) {
        LambdaLogger logger = ctx.getLogger();

        LoginResponse response = new LoginResponse();
        if (StringUtils.isNullOrEmpty(request.getUsername())) {
            response.setErrorMessage("Invalid Username!!");
            return response;
        }

        String domainName = request.getUsername().substring(request.getUsername().indexOf('@') + 1);
        log.info("Domain name [{}] : ", domainName);
        Item itm = findDomainName(domainName);
        if(null == itm) {
            response.setErrorMessage("Invalid Username!!");
            throw new RuntimeException("Error Message");
        }
}

所以我的理解是,当系统抛出 RuntimeException 时,aws 将其视为内部服务器错误,状态码为 500,它将执行模板映射。 但它总是返回 200。我们如何返回 500 或其他一些状态代码,以便它可以使用 java 映射到集成响应模式。

谢谢

【问题讨论】:

  • 在抛出异常之前将状态设置为 500。例如,对于 servlet,方法是在抛出异常 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR) 之前添加这一行。
  • 这个响应是我的项目局部变量而不是 http 响应。它会工作还是你的意思是,以某种方式自动连接 HttpServletResponse 然后设置代码。
  • servlet 只是一个示例,因为您使用的是 AWS lambda,所以您不会在这里使用它。不幸的是,我不是 AWS lambda 方面的专家,但他们必须有一些内置包,您可以将这些包导入到您的代码中,该包有一个响应变量,允许您在抛出异常之前更改状态代码

标签: aws-lambda aws-api-gateway


【解决方案1】:

这个问题现在已经解决了,而且很简单。

只需抛出任何带有错误代码的用户定义或运行时异常。

if(null == itm) {
    throw new UserNotFoundException(ExceptionErrorCode.INTERNAL_SERVER_ERROR);
}

try {
    result = signIn(request.getUsername(), request.getPassword(), userPoolId, clientId);
}catch(NotAuthorizedException e) {
    throw new UserNotFoundException(ExceptionErrorCode.UN_AUTHORIZED);
}

然后将这些错误代码映射到 api 集成响应中。 我们需要这样做才能从 lambda 发送自定义消息/错误代码。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-29
    • 2016-08-07
    • 2021-05-14
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多