aws / aws/serverless-java-container
com.amazonaws.apigateway.request.context missing in backend @RestController
- Ngôn ngữ chính
- Java
- Star
- 1.6k
- Fork
- 574
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
# 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 handler;
static {
try {
handler = new SpringBootProxyHandlerBuilder()
.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 get(
final @RequestHeader HttpHeaders reqHeaders,
final @RequestParam Map 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.3` application with `aws-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 `requestContext` is always `null`.
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu với entry point LambdaHandler và GeographicAddressController được nêu trong issue, sau đó theo dõi cách API Gateway request context được cung cấp cho các thuộc tính của Spring controller. Tái hiện request bằng các phiên bản Spring Boot và container được liệt kê; hoàn tất khi @RequestAttribute nhận được AwsProxyRequestContext, bao gồm cả các chi tiết của authorizer, thay vì null.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- aws, java, spring-boot
- Lĩnh vực
- api, backend, cloud
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 42/100