Richieste filtrate Spring

di il
3 risposte

Richieste filtrate Spring

Salve, sto cercando un modo di effettuare richieste filtrate attraverso delle Applicazioni SpringBoot. Attraverso delle query string a mio piacimento devo creare dei metodi che mi permettono di restituire una struttura dati filtrata. Ad esempio
GET /stats?field=Popo2011&filter={"Popo2011": {"$bt": [1000, 10000]}}
Questo è un esempio di richiesta Get con la quale restituisco solo una parte della struttura dati.
Chiedo come si possa implementare un metodo/richiesta del genere

3 Risposte

  • Re: Richieste filtrate Spring

    Elsospi ha scritto:


    GET /stats?field=Popo2011&filter={"Popo2011": {"$bt": [1000, 10000]}}
    Se questo è proprio quello che il server riceve, allora a prima vista mi pare una cosa molto "custom", personalizzata e per nulla standard. Parlo del valore di filter, ovviamente.

    A parte il fatto che quando invii quel valore dal client, lo DEVI encodare correttamente. Perché spazi, { } ecc.. sono "speciali" in query string. Ma a parte questo, quello che a me sembra è ... un blocco di JSON, è così? Se così, allora vuol dire che hai un JSON dentro un query param ... una cosa non dico strana ma perlomeno abbastanza "inusuale".


    EDIT: mi sono ricordato ora che una forma come quella mi pare di averla già vista per le operazioni su MongoDB. C'entra qualcosa??

    EDIT2: alla luce di quello che ho dedotto, dovresti chiarire A CHI serve quel pezzo di JSON. Devi interpretarlo tu per fare una qualunque tua logica di filtro, generazione di SQL o quant'altro? O devi semplicemente passarlo ad un framework/libreria che SA già come interpretarlo??
  • Re: Richieste filtrate Spring

    Penso che tu abbia frainteso ciò che volevo fare. Il filtro è puramente logico, realizzato con operatori logici tipici di MongoDB. HO risolto il problema con la creazione di una interfaccia Filter<E,T>, il cui unico metodo restituirà una generica Collection. Poi tramite un metodo Select, creato in un'altra classe creerò una Collection, tramite queste istruzioni:
    try {
    Method m = item.getClass().getMethod("get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1),null);
    try {
    Object tmp = m.invoke(item);
    if(FilterUtils.check(tmp, operator, value))
    out.add(item);
    out sarà opportunatamente restituito nel Controller, in un metodo mappato di tipo GET.
    La ringrazio per l'esauriente risposta
  • Re: Richieste filtrate Spring

    Elsospi ha scritto:


    Penso che tu abbia frainteso ciò che volevo fare.
    Non ho frainteso nulla. I due casi d'uso generali li ho detti nel mio EDIT2 (l'hai letto?). E da quanto hai appena detto è proprio quello che dicevo prima: "Devi interpretarlo tu per fare una qualunque tua logica di filtro"

    Elsospi ha scritto:


    Method m = item.getClass().getMethod("get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1),null);
    Questo, scritto così, è abbastanza penoso, sebbene possa funzionare ...
Devi accedere o registrarti per scrivere nel forum
3 risposte