Ich habe einen Anwendungsfall, in dem ich alle Header, die mit einem bestimmten Präfix beginnen, an den Schein-Client übergeben muss. Ich kenne die Anzahl oder genaue Namen dieser Header nicht. Es scheint keinen Weg zu geben, dies leicht zu tun, da der Feign-Client erwartet, dass alle Header unter Verwendung von @RequestHeader("name")
spezifiziert werden. Es scheint nicht so etwas wie @RequestHeader HttpHeaders
zu unterstützen, was sehr nützlich wäre. Irgendwelche Vorschläge?Wie kann man eine beliebige Anzahl von Kopfzeilen an den Feign-Client übergeben, ohne alle Namen zu kennen?
Antwort
Zum Zeitpunkt des Schreibens, hat Feign keine dynamischen Header oder Abfrageparameter unterstützt eine Karte. Der Spring Cloud Feign-Client basiert auf den Spring-Annotationen anstelle von Feign-Annotationen, und die Implementierungen von AnnotatedParameterProcessor
haben einen Fehler, sodass sie nicht tun, was die Dokumentation angibt, dass sie tun sollten.
RequestHeader doc:
Wenn die Methode Parameter Karte, MultiValueMap oder httpheaders dann die -Karte mit allen Header-Namen und Werten gefüllt wird.
RequestParam doc:
Wenn die Methode Parameter-Karte oder eine MultiValueMap und ein Parametername ist nicht angegeben ist, dann wird die Karte Parameter mit allen Anfrage Parameternamen und Werte aufgefüllt wird.
Ich habe eine pull request eingereicht, die das beheben wird. Bis dahin verwende ich eine Erweiterung von SpringMvcContract
, die meine eigenen AnnotatedParameterProcessor
Implementierungen verwendet. Ich habe die Gewohnheit SpringMvcContract
ein Feign.Builder
wie folgt verwendet:
@Autowired
FormattingConversionService feignConversionService;
@Bean
@Scope(SCOPE_PROTOTYPE)
public Feign.Builder feignBuilder() {
return HystrixFeign.builder()
.contract(feignContract());
}
@Bean
public Contract feignContract() {
return new EnhancedSpringMvcContract(feignConversionService);
}
Von der documentation sollten Sie in der Lage sein, eine Kopfzuordnung für dynamische Kopfzeilen anzugeben.
In Fällen, in denen sowohl die Header-Feld Schlüssel und Werte sind dynamisch und die Bandbreite der möglichen Schlüssel nicht vor der Zeit bekannt sein und zwischen den verschiedenen Methodenaufrufe in der gleichen api/Client (zB benutzerdefinierte Metadaten-Header-Felder diese variieren können Als "x-amz-meta- " oder "x-goog-meta-" kann ein Map-Parameter mit HeaderMap versehen werden, um eine Abfrage zu erstellen, die den Inhalt der Map als Header-Parameter verwendet.
@RequestLine("POST /")
void post(@HeaderMap Map<String, Object> headerMap);
- 1. Wie kann ich eine beliebige Menge von Protobuf-Dateien einfügen, ohne deren Namen zu kennen?
- 2. Eine beliebige Anzahl von Parametern an eine Methode übergeben?
- 3. Casting [Beliebige?] Zu [Beliebige] ohne eine Warnung
- 4. (JavaFX) Wie übergeben Sie die Instanz der Klasse an einen FXML-Controller, ohne den Namen des Controllers zu kennen?
- 5. Drop Foreign Key ohne den Namen der Einschränkung zu kennen?
- 6. Wie kann man eine Methode aufrufen, ohne ihren Namen in C# zu kennen?
- 7. Sparql: Wie kann man eine beliebige Anzahl von Werten derselben Eigenschaft abrufen?
- 8. Kann mod_rewrite eine beliebige Anzahl von Parametern mit beliebigen Namen konvertieren?
- 9. Erhalten Sie Schlüssel/Wert von JSON Array von Objekten, ohne den Schlüssel Namen zu kennen
- 10. Wie SQL-Standardeinschränkung zu löschen, ohne seinen Namen zu kennen?
- 11. Mongodb: Wie kann man den Wert lesen, ohne den Feldnamen zu kennen?
- 12. Wie übergibt man den Namen einer Klassenvariablen an eine Funktion?
- 13. Wie kann ich alle Plugin-Namen in CKEditor kennen?
- 14. Greifen Sie auf eine Coldfusionsvariable zu, ohne den Namen zu kennen
- 15. mod_rewrite für eine beliebige Anzahl von Variablen
- 16. Wie kann man auf Komponenten zugreifen, ohne ihren Namen zu kennen?
- 17. Warum kann Task.WhenAll eine beliebige Anzahl von Task-Argumenten annehmen?
- 18. wie Muster für eine beliebige Anzahl von Argumenten zu pattern?
- 19. Wie instanziiert man eine Unterklasse, ohne sie vorher zu kennen?
- 20. JavaScript-Funktion erlauben, eine beliebige Anzahl von Argumenten zu akzeptieren
- 21. Wie erhalten Sie alle XML-Knoten mit demselben Namen, ohne deren Level zu kennen?
- 22. Wie man variable Entitäten an eine generische Funktion übergeben kann?
- 23. Caesar Chiffre ohne den Schlüssel zu kennen
- 24. Wie kann ich eine beliebige Anzahl von Argumenten in Benutzerdefine-Funktion in C übergeben?
- 25. Wert der ersten Spalte erhalten, ohne Namen zu kennen
- 26. Wie Abfragezielliste einer Einschränkung, ohne den Einschränkungstyp zu kennen?
- 27. Wie kann ich eine variable Anzahl von benannten Parametern an eine Methode übergeben?
- 28. Wie kann man eine Kartenfunktion an eine benutzerdefinierte Komponente übergeben?
- 29. Hat Ruby eine beliebige Anzahl von Formatierungsklassen?
- 30. Wie kann man eine beliebige Anzahl von Feldern im Django-Modell speichern?
funktioniert nicht. Überprüfen Sie meine [hier] (https://gist.github.com/abhijitsarkar/c3ab6269ef92c8f0323ca2a1bf8b8bda), die reproduzierbaren Code hat. –