@@ -132,6 +132,7 @@ abstract class HttpController {
132
132
(attr) => attr.reflectee is Route , orElse: () => null );
133
133
if (routeAttrs != null ) {
134
134
var params = (decl as MethodMirror ).parameters
135
+ .where ((pm) => ! pm.isOptional)
135
136
.map ((pm) => MirrorSystem .getName (pm.simpleName))
136
137
.toList ();
137
138
Route r = new Route .fromRoute (routeAttrs.reflectee, params);
@@ -177,6 +178,7 @@ abstract class HttpController {
177
178
reflect (this ).type.declarations[handlerMethodSymbol] as MethodMirror ;
178
179
179
180
return handlerMirror.parameters
181
+ .where ((methodParmeter) => ! methodParmeter.isOptional)
180
182
.map ((methodParameter) {
181
183
var value = this .resourceRequest.pathParameters[MirrorSystem .getName (methodParameter.simpleName)];
182
184
var parameterType = methodParameter.type;
@@ -185,14 +187,37 @@ abstract class HttpController {
185
187
}).toList ();
186
188
}
187
189
190
+ Map <String , dynamic > _queryParametersForRequest (ResourceRequest req, Symbol handlerMethodSymbol) {
191
+ var queryParams = req.request.uri.queryParameters;
192
+ if (queryParams.length == 0 ) {
193
+ return null ;
194
+ }
195
+
196
+ var optionalParams = (reflect (this ).type.declarations[handlerMethodSymbol] as MethodMirror )
197
+ .parameters.where ((methodParameter) => methodParameter.isOptional).toList ();
198
+
199
+ var retMap = {};
200
+ queryParams.forEach ((k, v) {
201
+ var keySymbol = new Symbol (k);
202
+ var matchingParameter = optionalParams.firstWhere ((p) => p.simpleName == keySymbol, orElse: () => null );
203
+ if (matchingParameter != null ) {
204
+ retMap[keySymbol] = v;
205
+ }
206
+ });
207
+
208
+ return retMap;
209
+ }
210
+
188
211
Future process () async {
189
212
try {
190
213
var methodSymbol = _routeMethodSymbolForRequest (resourceRequest);
191
214
var handlerParameters = _parametersForRequest (resourceRequest, methodSymbol);
215
+ var handlerQueryParameters = _queryParametersForRequest (resourceRequest, methodSymbol);
216
+
192
217
requestBody = await _readRequestBodyForRequest (resourceRequest);
193
218
194
219
Future <Response > eventualResponse =
195
- reflect (this ).invoke (methodSymbol, handlerParameters).reflectee;
220
+ reflect (this ).invoke (methodSymbol, handlerParameters, handlerQueryParameters ).reflectee;
196
221
197
222
var response = await eventualResponse;
198
223
0 commit comments