Spring Boot encoding Slash in URL Parameter

OnDemand

Top Contributor
Hallo zusammen,

mich ärgert grad eine API. Ich möchte prüfen ob es einen Wert schon gibt, dafür stellt die API folgenden Endpoint zur Verfügung:

/name?title=<name>

Nun enthält mein name einen Slash welcher nicht encoded wird, daher bekomme ich ein falsches Ergebnis.

Folgend meine (simplifizierte) GET Methode:

Java:
public Collection getCollectionByName(String name){
    
            String serviceURL = "https:/domain.de/admin/api/name" ;

            UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(serviceURL)
                    .queryParam("title", name);

            //Auth...
            RestTemplate restTemplate = new RestTemplate();
            ResponseEntity<Collection> response = restTemplate.exchange(uriBuilder.toUriString(), HttpMethod.GET, entity, Collection.class);
            return response.getBody().getSmartCollection();

        }

Gesendet wird: https:/domain.de/admin/api/name?Hose/Unterhose
Es müsste aber sein: https:/domain.de/admin/api/name?Hose%2FUnterhose

Wenn ich den String mit .replaceAll("/","%2F") ersetze, wird das Prozentzeichen widerum maskiert und die Ausgabe stimmt ebenfalls nich.

Wenn ein Leerzeichen im Namen vorkommt, wird das korrekt mit %20 maskiert, die Slash hingegen nich. Hat jemand eine Idee wie ich Resttemplate korrekt konfigurieren, damit das korrekt maskiert/encoded?
 
Hmmm was könnte dann das Problem sein? Wenn ich die selbe URL mit Postman an die API sende, bekomme ich zurück, was ich erwarte. (da geb ich den Slash auch direkt ein, ohne maskieren oder sonst was
 
Postman escaped einen Slash innerhalb eines Query Parameters ebenfalls nicht.
Es ist gerade auch völlig unbekannt, was du als Ergebnis denn bekommst und was du stattdessen erwartest.
Vielleicht ist ja auch das Problem, dass deine URL (wie oben gezeigt), nur einen Slash hinter dem Schemateil hat:
https:/domain.de/admin/api/name
 
Ich bekomme ein leeres Array zurück, in Postman hingegen das Object was ich erwarte.
Hab oben einen Typo.
Die URL wird wie folgt erstellt in Postman als auch in meinem Programm:
Gesendet wird: https:/domain.de/admin/api?name=Hose/Unterhose
 
Oben im Code steht aber:

https:/domain.de/admin/api/name?title=wert

a) nur ein / nach dem https (vermutlich Tippfehler)
b) Der Query-Parameter ist dort title und nicht name.
 
Ja ist ein Tippfehler. Hab mir jetzt einen Interceptor eingebaut, welcher mir ausgibt was empfangen wird.
Es liegt nicht an der URL sondern es kommt eine andere Struktur zurück, als in der Doku steht.
Danke für Eure Hilfe, Problem lag also ganz wo anders 😀
 

Zurück
Oben