J'améliore une API existante, et l'exigence est de fournir une seule méthode get qui peut accepter plusieurs critères de recherche et, en fonction de ces critères, exécuter la requête.
J'utilise Spring MVC. La signature de la méthode get:
@GetMapping("/subscribers")
public ResponseEntity<List<SubscriberDTO>> getAllSubscribers(Pageable pageable, @RequestBody List<SearchCriteria> lstSearchCriteria)
L'implémentation fonctionne comme prévu testé sur Postman
Maintenant, j'allais Angular pour implémenter le frontal et je ne peux pas trouver un moyen d'envoyer un corps via la méthode Get HttpClient ...
Je suis un peu coincé. Dois-je envoyer les critères de recherche sur les en-têtes? Ou y a-t-il une meilleure façon de le faire?
Pour rendre la réponse d'Amir plus générique, j'ai fait ce qui suit pour créer des paramètres pour l'élément transmis.
À mon service de données génériques, j'ai ajouté cette variante:
// Get data for passed parameters or item containing filters
public getByItem<T>(apiMethod: string, item?: T, apiParms?: HttpParams): Observable<T> {
if (!apiParms) apiParms = new HttpParams();
if (item) {
const keys = Object.keys(item) as Array<keyof T>;
for (let key of keys) {
apiParms = apiParms.append(key.toString(), item[key].toString());
}
}
// Call generic method of data service
return this.get<T>(apiMethod, apiParms); // => return this.http.get<T>(environment.apiUrl + apiMethod, { headers: this.defaultHeaders