aws / aws/serverless-java-container
com.amazonaws.apigateway.request.context missing in backend @RestController
- Lingua principale
- Java
- Stelle
- 1.6k
- Fork
- 574
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
# 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`.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Start with the LambdaHandler entry point and GeographicAddressController shown in the issue, then trace how the API Gateway request context is exposed to Spring controller attributes. Reproduce the request with the listed Spring Boot and container versions; done means @RequestAttribute receives the AwsProxyRequestContext, including authorizer details, instead of null.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- aws, java, spring-boot
- Ambito
- api, backend, cloud
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100