Skip to content

Commit a8aaa55

Browse files
committed
getRequestURL should work now
1 parent ad1107b commit a8aaa55

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ public String getPathTranslated() {
224224

225225
@Override
226226
public String getContextPath() {
227-
return "/";
227+
return request.getRequestContext().getStage();
228228
}
229229

230230

@@ -270,8 +270,13 @@ public StringBuffer getRequestURL() {
270270
String url = "";
271271
url += getHeaderCaseInsensitive(HttpHeaders.HOST);
272272
url += "/";
273+
url += getContextPath();
274+
url += "/";
273275
url += request.getPath();
274-
return new StringBuffer(url);
276+
277+
url = url.replaceAll("/+", "/");
278+
279+
return new StringBuffer(getScheme() + "://" + url);
275280
}
276281

277282

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,28 @@ public AwsProxyRequestBuilder cookie(String name, String value) {
168168
return this;
169169
}
170170

171+
public AwsProxyRequestBuilder scheme(String scheme) {
172+
if (request.getHeaders() == null) {
173+
request.setHeaders(new HashMap<>());
174+
}
175+
176+
request.getHeaders().put("CloudFront-Forwarded-Proto", scheme);
177+
return this;
178+
}
179+
180+
public AwsProxyRequestBuilder serverName(String serverName) {
181+
if (request.getHeaders() == null) {
182+
request.setHeaders(new HashMap<>());
183+
}
184+
185+
request.getHeaders().put("Host", serverName);
186+
return this;
187+
}
188+
189+
public AwsProxyRequestBuilder stage(String stage) {
190+
this.request.getRequestContext().setStage(stage);
191+
return this;
192+
}
171193

172194
public AwsProxyRequest build() {
173195
return this.request;

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,31 @@ public void servletRequestEncoding_acceptEncoding_okStatusCode() {
187187
assertEquals(200, output.getStatusCode());
188188
}
189189

190+
@Test
191+
public void request_requestURI() {
192+
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-URI", "GET")
193+
.build();
194+
195+
AwsProxyResponse output = handler.proxy(request, lambdaContext);
196+
assertEquals(200, output.getStatusCode());
197+
198+
validateSingleValueModel(output, "/echo/request-URI");
199+
}
200+
201+
@Test
202+
public void request_requestURL() {
203+
AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-Url", "GET")
204+
.scheme("https")
205+
.serverName("api.myserver.com")
206+
.stage("prod")
207+
.build();
208+
209+
AwsProxyResponse output = handler.proxy(request, lambdaContext);
210+
assertEquals(200, output.getStatusCode());
211+
212+
validateSingleValueModel(output, "https://api.myserver.com/prod/echo/request-Url");
213+
}
214+
190215
private void validateMapResponseModel(AwsProxyResponse output) {
191216
try {
192217
MapResponseModel response = objectMapper.readValue(output.getBody(), MapResponseModel.class);

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,20 @@ public ResponseEntity<byte[]> echoBinaryData() {
8383

8484
return new ResponseEntity<byte[]>(b, HttpStatus.OK);
8585
}
86+
87+
@RequestMapping(path = "/request-URI", method = RequestMethod.GET)
88+
public SingleValueModel echoRequestURI(HttpServletRequest request) {
89+
SingleValueModel valueModel = new SingleValueModel();
90+
valueModel.setValue(request.getRequestURI());
91+
92+
return valueModel;
93+
}
94+
95+
@RequestMapping(path = "/request-Url", method = RequestMethod.GET)
96+
public SingleValueModel echoRequestURL(HttpServletRequest request) {
97+
SingleValueModel valueModel = new SingleValueModel();
98+
valueModel.setValue(request.getRequestURL().toString());
99+
100+
return valueModel;
101+
}
86102
}

0 commit comments

Comments
 (0)