При вызове GET http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo=
моего приложения Spring Boot RestController с таким обработчиком запросов:
@RequestMapping("/things/{thingId}")
public ResponseEntity<Thing> getThing(
@PathVariable String thingId) {
System.out.println("thingId=" + thingId);
...
приводит к тому, что следующее печатается ZhaD2lk27XQPRJtwrABltd UTWXcbnY/TrpxGP7VDVo=
вместо того, что я ожидал ZhaD2lk27XQPRJtwrABltd+UTWXcbnY/TrpxGP7VDVo=
.
Как видите, плюс превращается в пробел. Этого не должно происходить с частью пути, только с частью запроса. Вот почему Spring UriComponentsBuilder.build().encode()
, который я использую для создания URL-адреса, не превращает плюс в %2B
.
Мне нужно было настроить приложение, чтобы закодированная косая черта (/) работала. Дополнительные сведения см. в разделе Конечная точка REST недоступна, если идентификатор в URL-адресе содержит %2F.
Я использую SpringBoot 1.4.4.RELEASE, в котором используется Tomcat Embed 8.5.11.
Я пытался вызвать службу из Spring RestTemplate, Postman и Chrome. Одинаковые результаты во всех случаях, плюс превращается в пробел