com.amazonaws.apigateway.request.context missing in backend @RestController
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 新手友好度
- 42/100
- Issue 類型
- 缺陷
- 描述清晰度
- 基本清楚
- 活躍度
- 停滯
- 技術堆疊
- aws, java, spring-boot
研究方向
從 issue 中展示的 LambdaHandler 進入點和 GeographicAddressController 開始,然後追蹤 API Gateway request context 如何暴露給 Spring controller 屬性。使用列出的 Spring Boot 和容器版本重現該請求;當 @RequestAttribute 接收到包含 authorizer 詳細資訊的 AwsProxyRequestContext,而不是 null 時,即表示完成。
由索引模型根據 Issue 內容生成。
描述
Issue: com.amazonaws.apigateway.request.context missing in backend @RestController
To help us debug your issue fill in the basic information below using the options provided
Serverless Java Container version: 2.1.4
Implementations: Spring Boot 3
Framework version: SpringBoot 3.5.3
Frontend service: REST API / API Gateway Proxy Request
Deployment method: SAM
Description
When using Spring Boot 3.5.3 with aws-serverless-java-container-springboot3:2.1.4,
the AwsProxyRequestContext is not being injected into a controller method when annotated with:
@RequestAttribute("com.amazonaws.apigateway.request.context")
This attribute is expected to contain the API Gateway request context, but instead it is always null.
Lambda Handler
import com.amazonaws.serverless.exceptions.ContainerInitializationException;
import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler;
import com.amazonaws.serverless.proxy.model.AwsProxyRequest;
import com.amazonaws.serverless.proxy.model.AwsProxyResponse;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestStreamHandler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class LambdaHandler implements RequestStreamHandler {
private static final SpringBootLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;
static {
try {
handler = new SpringBootProxyHandlerBuilder<AwsProxyRequest>()
.defaultProxy()
.initializationWrapper(new InitializationWrapper())
.springBootApplication(Application.class)
.buildAndInitialize();
} catch (ContainerInitializationException e) {
throw new LambdaException("Could not initialize Lambda. ", e);
}
}
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
handler.proxyStream(inputStream, outputStream, context);
}
}
Controller
import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController
public class GeographicAddressController {
private static final String API_GATEWAY_CONTEXT_PROPERTY = "com.amazonaws.apigateway.request.context";
@GetMapping(path = "/geographicAddress", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Object> get(
final @RequestHeader HttpHeaders reqHeaders,
final @RequestParam Map<String, String> params,
final @RequestAttribute(value = API_GATEWAY_CONTEXT_PROPERTY, required = false) AwsProxyRequestContext requestContext
) {
// requestContext is always null, I would like to get AwsProxyRequestContext , and authorizer details
return ResponseEntity.ok().build();
}
}
Expected Behavior
The requestContext parameter should be populated with the AwsProxyRequestContext extracted from the incoming API Gateway event.
Actual Behavior
requestContext is always null inside the controller method.
Steps to Reproduce
- Deploy a
Spring Boot 3.5.3application withaws-serverless-java-container-springboot3:2.1.4. - Use the Lambda handler shown above.
- Add a controller method with
@RequestAttribute("com.amazonaws.apigateway.request.context"). - Invoke the API Gateway endpoint.
- Observe that
requestContextis alwaysnull.
- 主要語言
- Java
- 星號
- 1.6k
- 分支
- 575
- 平均合併
- 1 天 15 小時
- 30 天內合併 PR
- 12
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
aws/serverless-java-container 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 72/100
aws/serverless-java-container#1729 ·
維護者通常 1 天內回覆
-
難度 1/5 1 小時以內 新手友好度 88/100
aws/serverless-java-container#1715 ·
維護者通常 1 天內回覆
-
Support for API Gateway mTLS clientCert field可能已有人在做 @2748109647 於 10 天前認領。 未關閉
難度 2/5 1-3 小時 新手友好度 48/100
aws/serverless-java-container#1726 ·
維護者通常 1 天內回覆
-
難度 4/5 3-5 天 新手友好度 35/100
aws/serverless-java-container#1579 · 3 則留言 · 1 個 reaction ·
維護者通常 1 天內回覆
-
難度 3/5 1-2 天 新手友好度 42/100
aws/serverless-java-container#1568 · 1 則留言 ·
維護者通常 1 天內回覆
查看 aws/serverless-java-container 的全部 Issue
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 75/100
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 75/100
ls1intum/thesis-management#1473 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 76/100
LunaDeerMC/Dominion#301 · 1 則留言 ·
-
[FEATURE] Expose external refresh, node-level translog and warmer stats可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉untriaged
難度 2/5 1-3 小時 新手友好度 68/100
opensearch-project/opensearch-prometheus-exporter#680 ·
維護者通常 2 天內回覆
-
難度 2/5 1-3 小時 新手友好度 85/100