Skip to content

Commit b60ea57

Browse files
authored
Add triming of the URI in the HTTPRequest class (#23)
- Before this change, seting a baseUrl ending with a "/" and setting a endpoint beginning with a "/" would result in "//" in the url. This change will trim the url so it doesn't matter if you add trailing slash on the baseurl or not as well as the leading slash on the endpoint. - Adding tests for this new functionality.
1 parent e675355 commit b60ea57

File tree

2 files changed

+86
-3
lines changed

2 files changed

+86
-3
lines changed

src/main/java/com/ericsson/eiffelcommons/utils/HttpRequest.java

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ public String getBaseUrl() {
102102
* @param baseUrl
103103
*/
104104
public HttpRequest setBaseUrl(String baseUrl) {
105+
baseUrl = trimBaseUrl(baseUrl);
105106
this.baseUrl = baseUrl;
106107
return this;
107108
}
@@ -212,14 +213,54 @@ public HttpRequest setBody(File file) throws IOException {
212213
* @throws ClientProtocolException
213214
*/
214215
public ResponseEntity performRequest() throws URISyntaxException, ClientProtocolException, IOException {
215-
URIBuilder builder = new URIBuilder(baseUrl + endpoint);
216+
URIBuilder builder = createURIBuilder();
217+
builder = addParametersToURIBuilder(builder);
216218

219+
request.setURI(builder.build());
220+
return executor.executeRequest(request);
221+
}
222+
223+
/**
224+
* Function that adds parameters to the URIBuilder
225+
*
226+
* @param URIBuilder
227+
* @return URIBuilder
228+
*/
229+
private URIBuilder addParametersToURIBuilder(URIBuilder builder) {
217230
if (!params.isEmpty()) {
218231
for (Map.Entry<String, String> entry : params.entrySet()) {
219232
builder.addParameter(entry.getKey(), entry.getValue());
220233
}
221234
}
222-
request.setURI(builder.build());
223-
return executor.executeRequest(request);
235+
236+
return builder;
237+
}
238+
239+
/**
240+
* Function that creates the URI from the baseUrl and endpoint
241+
*
242+
* @param
243+
* @return URIBuilder
244+
* @throws URISyntaxException
245+
*/
246+
private URIBuilder createURIBuilder() throws URISyntaxException {
247+
if(endpoint.startsWith("/")) {
248+
return new URIBuilder(baseUrl + endpoint);
249+
} else {
250+
return new URIBuilder(baseUrl + "/" + endpoint);
251+
}
252+
}
253+
254+
/**
255+
* Function that trims the base url for trailing slashes
256+
*
257+
* @return HttpRequest
258+
*/
259+
private String trimBaseUrl(String baseUrl) {
260+
if(baseUrl.endsWith("/")) {
261+
baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
262+
}
263+
264+
return baseUrl;
224265
}
225266
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.ericsson.eiffelcommons.Utilstest;
2+
3+
import static org.junit.Assert.assertEquals;
4+
5+
import java.lang.reflect.InvocationTargetException;
6+
import java.lang.reflect.Method;
7+
8+
import org.apache.http.client.utils.URIBuilder;
9+
import org.junit.Test;
10+
11+
import com.ericsson.eiffelcommons.utils.HttpRequest;
12+
import com.ericsson.eiffelcommons.utils.HttpRequest.HttpMethod;
13+
14+
public class HttpRequestTest {
15+
@Test
16+
public void testBuildingOfURI() throws NoSuchFieldException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {
17+
String expectedURI = "http://something.com/testing/test/";
18+
HttpRequest request= new HttpRequest(HttpMethod.POST);
19+
Method method = request.getClass().getDeclaredMethod("createURIBuilder");
20+
method.setAccessible(true);
21+
22+
request.setBaseUrl("http://something.com");
23+
request.setEndpoint("/testing/test/");
24+
URIBuilder builder = (URIBuilder) method.invoke(request);
25+
assertEquals(expectedURI, builder.toString());
26+
27+
request.setBaseUrl("http://something.com/");
28+
request.setEndpoint("/testing/test/");
29+
builder = (URIBuilder) method.invoke(request);
30+
assertEquals(expectedURI, builder.toString());
31+
32+
request.setBaseUrl("http://something.com/");
33+
request.setEndpoint("testing/test/");
34+
builder = (URIBuilder) method.invoke(request);
35+
assertEquals(expectedURI, builder.toString());
36+
37+
request.setBaseUrl("http://something.com");
38+
request.setEndpoint("testing/test/");
39+
builder = (URIBuilder) method.invoke(request);
40+
assertEquals(expectedURI, builder.toString());
41+
}
42+
}

0 commit comments

Comments
 (0)