Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import org.springframework.util.StringUtils;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.DefaultUriBuilderFactory;
{{#threetenbp}}
import org.threeten.bp.*;
import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule;
Expand Down Expand Up @@ -622,6 +623,12 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
* @return path with placeholders replaced by variables
*/
public String expandPath(String pathTemplate, Map<String, Object> variables) {
// disable default URL encoding
DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();
uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
final RestTemplate restTemplate = new RestTemplate();
restTemplate.setUriTemplateHandler(uriBuilderFactory);

return restTemplate.getUriTemplateHandler().expand(pathTemplate, variables).toString();
}

Expand All @@ -632,27 +639,33 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} {
* @param uriParams The path parameters
* return templatized query string
*/
private String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
public String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
StringBuilder queryBuilder = new StringBuilder();
queryParams.forEach((name, values) -> {
if (CollectionUtils.isEmpty(values)) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(name);
} else {
int valueItemCounter = 0;
for (Object value : values) {
try {
final String encodedName = URLEncoder.encode(name.toString(), "UTF-8");
if (CollectionUtils.isEmpty(values)) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(name);
if (value != null) {
String templatizedKey = name + valueItemCounter++;
uriParams.put(templatizedKey, value.toString());
queryBuilder.append('=').append("{").append(templatizedKey).append("}");
queryBuilder.append(encodedName);
} else {
int valueItemCounter = 0;
for (Object value : values) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(encodedName);
if (value != null) {
String templatizedKey = encodedName + valueItemCounter++;
final String encodedValue = URLEncoder.encode(value.toString(), "UTF-8");
uriParams.put(templatizedKey, encodedValue);
queryBuilder.append('=').append("{").append(templatizedKey).append("}");
}
}
}
} catch (UnsupportedEncodingException e) {

}
});
return queryBuilder.toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.DefaultUriBuilderFactory;
import org.threeten.bp.*;
import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule;
import org.springframework.http.converter.HttpMessageConverter;
Expand Down Expand Up @@ -578,6 +579,12 @@ protected Object selectBody(Object obj, MultiValueMap<String, Object> formParams
* @return path with placeholders replaced by variables
*/
public String expandPath(String pathTemplate, Map<String, Object> variables) {
// disable default URL encoding
DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();
uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
final RestTemplate restTemplate = new RestTemplate();
restTemplate.setUriTemplateHandler(uriBuilderFactory);

return restTemplate.getUriTemplateHandler().expand(pathTemplate, variables).toString();
}

Expand All @@ -588,27 +595,33 @@ public String expandPath(String pathTemplate, Map<String, Object> variables) {
* @param uriParams The path parameters
* return templatized query string
*/
private String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
public String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
StringBuilder queryBuilder = new StringBuilder();
queryParams.forEach((name, values) -> {
if (CollectionUtils.isEmpty(values)) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(name);
} else {
int valueItemCounter = 0;
for (Object value : values) {
try {
final String encodedName = URLEncoder.encode(name.toString(), "UTF-8");
if (CollectionUtils.isEmpty(values)) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(name);
if (value != null) {
String templatizedKey = name + valueItemCounter++;
uriParams.put(templatizedKey, value.toString());
queryBuilder.append('=').append("{").append(templatizedKey).append("}");
queryBuilder.append(encodedName);
} else {
int valueItemCounter = 0;
for (Object value : values) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(encodedName);
if (value != null) {
String templatizedKey = encodedName + valueItemCounter++;
final String encodedValue = URLEncoder.encode(value.toString(), "UTF-8");
uriParams.put(templatizedKey, encodedValue);
queryBuilder.append('=').append("{").append(templatizedKey).append("}");
}
}
}
} catch (UnsupportedEncodingException e) {

}
});
return queryBuilder.toString();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.openapitools.client;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import java.util.*;
import org.junit.*;
import org.springframework.util.MultiValueMap;
import org.springframework.util.LinkedMultiValueMap;

public class ApiClientTest {
ApiClient apiClient;

@Before
public void setup() {
apiClient = new ApiClient();
}

/**
* Test uri encoding when params contains comma
*/
@Test
public void testUriEncoderWithComma() {
Map<String,Object> uriParams = new HashMap<>();
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<String, String>();
queryParams.add("key", "val,comma");
apiClient.generateQueryUri(queryParams, uriParams);

assertEquals("/key=val%2Ccomma", apiClient.expandPath("/key={key0}", uriParams));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.DefaultUriBuilderFactory;
import org.threeten.bp.*;
import com.fasterxml.jackson.datatype.threetenbp.ThreeTenModule;
import org.springframework.http.converter.HttpMessageConverter;
Expand Down Expand Up @@ -573,6 +574,12 @@ protected Object selectBody(Object obj, MultiValueMap<String, Object> formParams
* @return path with placeholders replaced by variables
*/
public String expandPath(String pathTemplate, Map<String, Object> variables) {
// disable default URL encoding
DefaultUriBuilderFactory uriBuilderFactory = new DefaultUriBuilderFactory();
uriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.NONE);
final RestTemplate restTemplate = new RestTemplate();
restTemplate.setUriTemplateHandler(uriBuilderFactory);

return restTemplate.getUriTemplateHandler().expand(pathTemplate, variables).toString();
}

Expand All @@ -583,27 +590,33 @@ public String expandPath(String pathTemplate, Map<String, Object> variables) {
* @param uriParams The path parameters
* return templatized query string
*/
private String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
public String generateQueryUri(MultiValueMap<String, String> queryParams, Map<String, Object> uriParams) {
StringBuilder queryBuilder = new StringBuilder();
queryParams.forEach((name, values) -> {
if (CollectionUtils.isEmpty(values)) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(name);
} else {
int valueItemCounter = 0;
for (Object value : values) {
try {
final String encodedName = URLEncoder.encode(name.toString(), "UTF-8");
if (CollectionUtils.isEmpty(values)) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(name);
if (value != null) {
String templatizedKey = name + valueItemCounter++;
uriParams.put(templatizedKey, value.toString());
queryBuilder.append('=').append("{").append(templatizedKey).append("}");
queryBuilder.append(encodedName);
} else {
int valueItemCounter = 0;
for (Object value : values) {
if (queryBuilder.length() != 0) {
queryBuilder.append('&');
}
queryBuilder.append(encodedName);
if (value != null) {
String templatizedKey = encodedName + valueItemCounter++;
final String encodedValue = URLEncoder.encode(value.toString(), "UTF-8");
uriParams.put(templatizedKey, encodedValue);
queryBuilder.append('=').append("{").append(templatizedKey).append("}");
}
}
}
} catch (UnsupportedEncodingException e) {

}
});
return queryBuilder.toString();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.openapitools.client;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import java.util.*;
import org.junit.*;
import org.springframework.util.MultiValueMap;
import org.springframework.util.LinkedMultiValueMap;

public class ApiClientTest {
ApiClient apiClient;

@Before
public void setup() {
apiClient = new ApiClient();
}

/**
* Test uri encoding when params contains comma
*/
@Test
public void testUriEncoderWithComma() {
Map<String,Object> uriParams = new HashMap<>();
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<String, String>();
queryParams.add("key", "val,comma");
apiClient.generateQueryUri(queryParams, uriParams);

assertEquals("/key=val%2Ccomma", apiClient.expandPath("/key={key0}", uriParams));
}
}