Make fields from com.amazonaws.serverless.proxy.model.AwsProxyRequest optional to set

Ouverte
#1,495 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
35/100
Type d'issue
Fonctionnalité
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
aws, java, spring-boot
Domaine
api, backend

Piste de recherche

Commencez par com.amazonaws.serverless.proxy.model.AwsProxyRequest et la validation dans AwsProxyHttpServletRequestReader.readRequest. Comparez les exemples minimaux d’amorçage GET et POST de l’issue avec le modèle de request actuel et la gestion du contexte. Le travail est terminé lorsque les appelants peuvent construire les requests montrés sans champs ni objets factices, tout en continuant à prendre en charge les requests valides d’API Gateway.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

When using AWS Serverless Java Container with Spring Boot 3 and Lambda SnapStart with priming with I tested this type of priming implementation WebRequestPriming

Unfortunately I have to set so many fields of the com.amazonaws.serverless.proxy.model.AwsProxyRequest with dummy values and even create dummy objects like AwsProxyRequestContext and ApiGatewayRequestIdentity (see the method getAwsProxyRequest) in order not to get errors like:

at
com.amazonaws.serverless.exceptions.InvalidRequestEventException: The incoming event is not a valid request from Amazon API Gateway or an Application Load Balancer com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader.readRequest(AwsProxyHttpServletRequestReader.java:48)

or

java.lang.NullPointerException: Cannot invoke "com.amazonaws.serverless.proxy.model.ApiGatewayRequestIdentity.getAccessKey()" because the return value of "com.amazonaws.serverless.proxy.model.AwsProxyRequestContext.getIdentity()" is null

Here is the complete code I had to write in order to make it work:

private static AwsProxyRequest getAwsProxyRequest () {
	final AwsProxyRequest awsProxyRequest = new AwsProxyRequest ();
	awsProxyRequest.setHttpMethod("GET");
	awsProxyRequest.setPath("/products/0");
	//awsProxyRequest.setResource("/products/{id}");
	awsProxyRequest.setPathParameters(Map.of("id","0"));
	final AwsProxyRequestContext awsProxyRequestContext = new AwsProxyRequestContext();
	final ApiGatewayRequestIdentity apiGatewayRequestIdentity= new ApiGatewayRequestIdentity();
	apiGatewayRequestIdentity.setApiKey("blabla");
	awsProxyRequestContext.setIdentity(apiGatewayRequestIdentity);
	awsProxyRequest.setRequestContext(awsProxyRequestContext);
	return awsProxyRequest;		
}

For my use case this will be enough to do the priming like this:

  final AwsProxyRequest awsProxyRequest = new AwsProxyRequest ();
  awsProxyRequest.setHttpMethod("GET");
  awsProxyRequest.setPathParameters(Map.of("id","0"));

Others, that priming Post request would only like to set the body like this:

  final AwsProxyRequest awsProxyRequest = new AwsProxyRequest ();
  awsProxyRequest.setHttpMethod("POST");
  awsProxyRequest.setBody("bla");

Many field should be optional to set to easily construct such objects or please provide static factory methods for it to save on the boilerplate code.

Compare it with how easy it is to implement the same type of SnapStart priming with

  1. Spring Cloud Function AWS Adapter

see my implementation of the method getAPIGatewayProxyRequestEventAsJson here AmazonAPIGatewayPrimingResource

as I only do

    final APIGatewayProxyRequestEvent proxyRequestEvent = new APIGatewayProxyRequestEvent ();
	proxyRequestEvent.setHttpMethod("GET");
	proxyRequestEvent.setPathParameters(Map.of("id","0"));
  1. Quarkus 3, see my implementation of the method getAwsProxyRequest here AmazonAPIGatewayPrimingResource

as I only do the same as above:

    final APIGatewayProxyRequestEvent proxyRequestEvent = new APIGatewayProxyRequestEvent ();
	proxyRequestEvent.setHttpMethod("GET");
	proxyRequestEvent.setPathParameters(Map.of("id","0"));
Langage dominant
Java
Étoiles
1.6k
Forks
575
Merge moyen
1 j 15 h
PR mergées (30 j)
12

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de aws/serverless-java-container

Toutes les issues de aws/serverless-java-container

Issues similaires

Plus d'issues Java

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.