aws / aws/serverless-java-container

com.amazonaws.apigateway.request.context missing in backend @RestController

Open
#1,551 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
1.6k
Forks
574
PR merge metrics
No merged PRs in 30d

Description

# 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`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.