Lorsque vous appelez GET http://localhost:8080/things/ZhaD2lk27XQPRJtwrABltd+UTWXcbnY%2FTrpxGP7VDVo=
mon application Boot Spring RestController avec un gestionnaire de requêtes comme ceci:Pourquoi plus (+) est-il décodé en espace() dans le chemin d'URL avec le contrôleur de repos de springboot?
@RequestMapping("/things/{thingId}")
public ResponseEntity<Thing> getThing(
@PathVariable String thingId) {
System.out.println("thingId=" + thingId);
...
résultats dans ce qui suit en cours d'impression ZhaD2lk27XQPRJtwrABltd UTWXcbnY/TrpxGP7VDVo=
au lieu de ce que je me serais attendu à ZhaD2lk27XQPRJtwrABltd+UTWXcbnY/TrpxGP7VDVo=
.
Comme vous pouvez le voir, le plus est transformé en espace. Cela ne devrait pas arriver avec la partie chemin, seulement la partie requête. C'est pourquoi le Spring UriComponentsBuilder.build().encode()
que j'utilise pour construire l'URL ne transforme pas le plus en %2B
.
J'avais besoin de modifier l'application déjà pour faire fonctionner la barre oblique codée (/). Voir REST Endpoint unreachable if ID in URL contains %2F pour plus de détails. J'utilise SpringBoot 1.4.4.RELEASE qui utilise Tomcat embed 8.5.11.
J'ai essayé d'appeler le service de Spring RestTemplate, Postman et Chrome. Mêmes résultats dans tous les cas, le plus est transformé en espace
Etes-vous en train de taper l'URL dans le navigateur? ou invoquez-vous votre service avec js? ou invoquez-vous votre service à partir d'un client Java? – reos