Non esiste un modo standard per farlo.
Wink supporta javax.ws.rs.core.MultivaluedMap
. Quindi se invii qualcosa come http://example.com/?a=1&a=15&b=3
riceverai: chiave a
valori 1, 15; chiave b
valore 3.
Se è necessario analizzare qualcosa come ?a[1]=1&a[gv]=15&b=3
è necessario prendere lo javax.ws.rs.core.MultivaluedMap.entrySet()
ed eseguire un'ulteriore analisi dei tasti.
Ecco esempio di codice è possibile utilizzare (non provarlo, quindi potrebbe contenere alcuni piccoli errori):
String getArrayParameter(String key, String index, MultivaluedMap<String, String> queryParameters) {
for (Entry<String, List<String>> entry : queryParameters.entrySet()) {
String qKey = entry.getKey();
int a = qKey.indexOf('[');
if (a < 0) {
// not an array parameter
continue;
}
int b = qKey.indexOf(']');
if (b <= a) {
// not an array parameter
continue;
}
if (qKey.substring(0, a).equals(key)) {
if (qKey.substring(a + 1, b).equals(index)) {
return entry.getValue().get(0);
}
}
}
return null;
}
Nella tua risorsa che si dovrebbe chiamare in questo modo:
@GET
public void getResource(@Context UriInfo uriInfo) {
MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();
getArrayParameter("a", "foo", queryParameters);
}
Questo non è quello che voglio, perché le chiavi sono anche importanti per me. Quindi quando ottengo 'a', voglio che il suo valore sia: {'1': 1, 'gv': 1} – Martin
Il tuo formato proposto non è il solito formato dei parametri di query: mescoli il nome della chiave con l'indice. In ogni caso è possibile ottenere il keySet() dalla mappa e analizzarlo da soli. – Tarlog
Questa era l'idea iniziale - c'è qualcosa che posso usare invece di analizzarla da solo :) – Martin