2017-01-30 2 views
2

J'ai un simple exemple REST point final:Comment obtenir REST end-point pour accepter plusieurs paramètres de requête avec la même clé?

component 
    restpath = "checkboxes" 
    rest  = true 
{ 
    remote void function get(
    string value restargsource = "query" default="" 
) 
    httpmethod = "GET" 
    restpath = "" 
    produces = "application/json" 
    { 
    restSetResponse({ 
     "status" = 200, 
     "content" = SerializeJSON(ListToArray(value, ',')) 
    }); 
    } 
} 

Si je l'appelle à partir d'une simple page HTML:

<html> 
<body> 
    <form action="/rest/checkboxes/" method="GET"> 
    <label><input name="value" type="checkbox" value="a" /> a</label><br /> 
    <label><input name="value" type="checkbox" value="b" /> b</label><br /> 
    <label><input name="value" type="checkbox" value="c" /> c</label><br /> 
    <label><input name="value" type="checkbox" value="d" /> d</label><br /> 
    <label><input name="value" type="checkbox" value="e" /> e</label><br /> 
    <button type="submit">Submit</button> 
    </form> 
</body> 
</html> 

Ensuite, la requête HTTP GET a un URI comme:

http://localhost/rest/checkboxes/?value=b&value=e 

Lorsqu'il existe plusieurs paires clé-valeur avec la même clé.

Cependant, la sortie du composant est juste:

["b"] 

La seconde et sont omis les valeurs suivantes pour la même clé.

Comment puis-je obtenir toutes les valeurs de la clé?

Répondre

3

soit utiliser le champ URL (paramètres avec des clés dupliquées sont représentés sous forme de chaîne séparés par des virgules):

component 
    restpath = "checkboxes" 
    rest  = true 
{ 
    remote void function checkboxes(
    string value restargsource = "query" default="" 
) 
    httpmethod = "GET" 
    restpath = "" 
    produces = "application/json" 
    { 
    var v = []; 
    if (StructKeyExists(URL, "value")) 
    { 
     v = ListToArray(URL.value, ','); 
    } 

    restSetResponse({ 
     "status" = 200, 
     "content" = SerializeJson(v) 
    }); 
    } 
} 

Or getPageContext().getRequest().getParameterMap()[key] (paramètres avec des clés dupliquées sont représentés comme un tableau de chaînes):

component 
    restpath = "checkboxes" 
    rest  = true 
{ 
    remote void function checkboxes(
    string value restargsource = "query" default="" 
) 
    httpmethod = "GET" 
    restpath = "" 
    produces = "application/json" 
    { 
    var v = []; 
    var params = getPageContext().getRequest().getParameterMap(); 
    if (StructKeyExists(params, "value")) 
    { 
     v = params["value"]; 
    } 

    restSetResponse({ 
     "status" = 200, 
     "content" = SerializeJson(v) 
    }); 
    } 
}