如何在 spring 中发送带有查询参数 "test[]=test" 的请求?
How send request with query parameter "test[]=test" in spring?
我需要使用名为 test[]
的查询参数向 example.com/api
发送获取请求
为此,我使用 spring rest tepmlate
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(example.com/api)
.queryParam(test[], "test");
responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET,
new HttpEntity<>(this.setHttpHeader()),
new ParameterizedTypeReference<List<MyDTO>>() {
});
但是builder.toUriString()
returnexample.com/api?test%5B%5D=test
我尝试用我的方法替换 srting
private String repairUri(String uri) {
return url.replaceAll("%5B%5D", "[]");
}
并致电
responseEntity = restTemplate.exchange(repairUri(builder.toUriString()), HttpMethod.GET,
new HttpEntity<>(this.setHttpHeader()),
new ParameterizedTypeReference<List<MyDTO>>() {
});
但是进入 restTemplate.exchange() 这个 uri 再次转换为 example.com/api?test%5B%5D=test
。
与此同时,我很容易通过 POSTMan 发送 example.com/api?test[]=test
请求并且成功了。
如何在 Spring 中向 example.com/api?test[]=test
发送请求?
当您调用 restTemplate.exchange
时,只需将您的 repairUri
方法更改为此:
responseEntity = restTemplate.exchange(URLDecoder.decode(builder.toUriString(), "UTF-8"), HttpMethod.GET,
new HttpEntity<>(this.setHttpHeader()),
new ParameterizedTypeReference<List<MyDTO>>() {
});
我找到了一个解决方案。
在我的 restTemplate bean 定义中,我添加了这个设置:
public RestTemplate myRestTemplate() {
RestTemplate restTemplate = restTemplate(timeout);
DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
restTemplate.setUriTemplateHandler(builderFactory);
restTemplate.setErrorHandler(new RestClientResponseExceptionHandler());
return restTemplate;
}
这个page有人说DefaultUriBuilderFactory.EncodingMode.NONE
也合适。
在 link.
中阅读更多内容
我需要使用名为 test[]
的查询参数向 example.com/api
发送获取请求
为此,我使用 spring rest tepmlate
UriComponentsBuilder builder = UriComponentsBuilder
.fromUriString(example.com/api)
.queryParam(test[], "test");
responseEntity = restTemplate.exchange(builder.toUriString(), HttpMethod.GET,
new HttpEntity<>(this.setHttpHeader()),
new ParameterizedTypeReference<List<MyDTO>>() {
});
但是builder.toUriString()
returnexample.com/api?test%5B%5D=test
我尝试用我的方法替换 srting
private String repairUri(String uri) {
return url.replaceAll("%5B%5D", "[]");
}
并致电
responseEntity = restTemplate.exchange(repairUri(builder.toUriString()), HttpMethod.GET,
new HttpEntity<>(this.setHttpHeader()),
new ParameterizedTypeReference<List<MyDTO>>() {
});
但是进入 restTemplate.exchange() 这个 uri 再次转换为 example.com/api?test%5B%5D=test
。
与此同时,我很容易通过 POSTMan 发送 example.com/api?test[]=test
请求并且成功了。
如何在 Spring 中向 example.com/api?test[]=test
发送请求?
当您调用 restTemplate.exchange
时,只需将您的 repairUri
方法更改为此:
responseEntity = restTemplate.exchange(URLDecoder.decode(builder.toUriString(), "UTF-8"), HttpMethod.GET,
new HttpEntity<>(this.setHttpHeader()),
new ParameterizedTypeReference<List<MyDTO>>() {
});
我找到了一个解决方案。 在我的 restTemplate bean 定义中,我添加了这个设置:
public RestTemplate myRestTemplate() {
RestTemplate restTemplate = restTemplate(timeout);
DefaultUriBuilderFactory builderFactory = new DefaultUriBuilderFactory();
builderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
restTemplate.setUriTemplateHandler(builderFactory);
restTemplate.setErrorHandler(new RestClientResponseExceptionHandler());
return restTemplate;
}
这个page有人说DefaultUriBuilderFactory.EncodingMode.NONE
也合适。
在 link.