【发布时间】: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