Aws lambda Aws Lambda java函数alwasys返回200

Aws lambda Aws Lambda java函数alwasys返回200,aws-lambda,aws-api-gateway,Aws Lambda,Aws Api Gateway,我是aws lambda,使用Java构建一个功能,并集成响应以处理自定义映射。这是lambda的代码 @Override public LoginResponse handleRequest(LoginRequest request, Context ctx) { LambdaLogger logger = ctx.getLogger(); LoginResponse response = new LoginResponse();

我是aws lambda,使用Java构建一个功能,并集成响应以处理自定义映射。这是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将其映射到集成响应模式


谢谢

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

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

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

然后将这些错误代码映射到api集成响应中。 这是我们从lambda发送自定义消息/错误代码时需要执行的操作

谢谢


在抛出异常之前,将状态设置为500。例如,对于servlets,方法是在抛出异常响应.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR)之前添加此行。此响应是我的项目局部变量,而不是http响应。它会工作吗?或者你的意思是,以某种方式自动连接HttpServletResponse,然后设置代码。servlet只是一个例子,因为你使用的是AWS lambda,所以在这里你不会使用它。不幸的是,我不是AWS lambda方面的专家,但他们必须有一些内置的包,您可以将其导入到您的代码中,其中包含一个响应变量,允许您在抛出异常之前更改状态代码
try {
    result = signIn(request.getUsername(), request.getPassword(), userPoolId, clientId);
}catch(NotAuthorizedException e) {
    throw new UserNotFoundException(ExceptionErrorCode.UN_AUTHORIZED);
}