является значительным и, конечно, не означает пробел.
я есть этот метод контроллера Spring REST:
@ApiOperation("My method")
@RequestMapping(method = RequestMethod.POST, value = "/myMethod")
public void myMethod(@RequestParam("myParam") String myParam) {
...
}
REST-клиент генерируется с использованием CLA-кода swagger codegen с языкомЯва и библиотекаresttemplate:
public void myMethod(String myParam) throws RestClientException {
...
return apiClient.invokeAPI(path, HttpMethod.POST, queryParams, postBody, headerParams, formParams, accept, contentType, authNames, returnType);
}
И исходный код дляApiClient#invokeAPI
- который также генерируется - это:
public <T> T invokeAPI(String path, HttpMethod method, MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams, MultiValueMap<String, Object> formParams, List<MediaType> accept, MediaType contentType, String[] authNames, ParameterizedTypeReference<T> returnType) throws RestClientException {
updateParamsForAuth(authNames, queryParams, headerParams);
final UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(basePath).path(path);
if (queryParams != null) {
builder.queryParams(queryParams);
}
final BodyBuilder requestBuilder = RequestEntity.method(method, builder.build().toUri());
if(accept != null) {
requestBuilder.accept(accept.toArray(new MediaType[accept.size()]));
}
if(contentType != null) {
requestBuilder.contentType(contentType);
}
addHeadersToRequest(headerParams, requestBuilder);
addHeadersToRequest(defaultHeaders, requestBuilder);
RequestEntity<Object> requestEntity = requestBuilder.body(selectBody(body, formParams, contentType));
ResponseEntity<T> responseEntity = restTemplate.exchange(requestEntity, returnType);
...
}
Теперь, когда я звонюmyMethod
передавая строку, содержащую+
войти в системуmyParam
на сервере я получаю символ пробела вместо+
, Кажется, это проблема кодирования, так как знак плюс зарезервирован в параметрах запроса URL, чтобы заменить символ пробела. Это ошибка из кодекса Swagger или из классов Spring или совсем нет? Как я могу это исправить?
РЕДАКТИРОВАТЬ:
Определение Swagger похоже (генерируется из Spring REST-контроллера):
{
"swagger": "2.0",
...
"paths": {
"/myMethod": {
"get": {
"operationId": "myMethod",
"produces": [
"application/json"
],
"parameters": [
{
"name": "myParam",
"in": "query",
"required": true,
"type": "string"
}
],
"responses": {
...
}
}
}
...
}
РЕДАКТИРОВАТЬ:
Подобные проблемы, похоже, связаны с кодированием переменных пути. Когда я прохожу"bla:bla/bla"
к переменной пути специальные символы:
а также/
не будет закодирован, но будет отправлен как есть, что приведет к ошибке на стороне сервера, поскольку отображение не найдено.