Aws lambda Aws Lambda java函数alwasys返回200
我是aws lambda,使用Java构建一个功能,并集成响应以处理自定义映射。这是lambda的代码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();
@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);
}