2016-08-02 6 views
0

Ich benutze Feign in Spring-Cloud, ich habe ein Problem.Query-Wert enthält `{aa%` cause feign zurückgegeben HTTP-Statuscode 400

Dies ist mein Schein Client def.

@FeignClient("food-service") 
public interface FoodService { 
    @RequestMapping(value = {"/food"},method = {RequestMethod.GET}) 
    List<Food> find(@RequestParam("name") String name); 
} 
foodService.find("{co%%"); 

Dieser Aufruf wird Statuscode 400 zurückgegeben.

Dann prüfe ich den Code, und ich fand diesen Code in RequestTemplate Klasse:

private String encodeIfNotVariable(String in) { 
    if (in == null || in.indexOf('{') == 0) { 
     return in; 
    } 
    return urlEncode(in); 
} 

Verfahren encodeIfNotVariable in Abfrage genannt (String name, String ... Werte).

Das bedeutet, wenn der Wert { enthält und im ersten der Wert nicht codiert werden kann.

Wie kann ich das beheben?

Antwort

0

Der Charakter {ist ein unsafe character so müssen Sie es codieren:

Zeichen für eine Reihe von Gründen unsicher sein kann. ....

.... [missing part] ....

Andere Zeichen sind unsicher, da Gateways und anderen Transportmitteln manchmal ändern solche Zeichen bekannt sind. Diese Zeichen sind "{", "}", "|", "\", "^", "~",
"[", "]" und "` ".

Alle unsicheren Zeichen müssen immer in einer URL codiert sein. Beispielsweise muss das Zeichen "#" innerhalb von URLs auch in Systemen codiert werden, die normalerweise keine Fragment- oder Ankerbezeichner verwenden. Wenn die URL in ein anderes System kopiert wird, das diese URLs verwendet, ist es nicht erforderlich, die URL zu ändern URL-Codierung

Zusammengefasst Charakter { müssen %7B codiert werden:

foodService.find("%7Bco%%"); 

Weitere Informationen:

Sonst verwendet feign-netflix {und}, um Variablen zu setzen und dann durch Argumente zu ersetzen, die mit.kommentiert sind, aber Sie benutzen impl impl und tun es für Sie, wenn es benötigt wird.

Verwandte Themen