Skip to content

Commit d24546a

Browse files
committed
Improve toString for query param and path extension predicates
Issue: SPR-16829 (cherry picked from commit 7424ca5)
1 parent 2818051 commit d24546a

File tree

1 file changed

+88
-13
lines changed

1 file changed

+88
-13
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RequestPredicates.java

Lines changed: 88 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,17 @@ public static RequestPredicate OPTIONS(String pattern) {
263263
*/
264264
public static RequestPredicate pathExtension(String extension) {
265265
Assert.notNull(extension, "'extension' must not be null");
266-
return pathExtension(pathExtension -> {
267-
boolean match = extension.equalsIgnoreCase(pathExtension);
268-
traceMatch("Extension", extension, pathExtension, match);
269-
return match;
266+
return pathExtension(new Predicate<String>() {
267+
@Override
268+
public boolean test(String pathExtension) {
269+
boolean match = extension.equalsIgnoreCase(pathExtension);
270+
traceMatch("Extension", extension, pathExtension, match);
271+
return match;
272+
}
273+
274+
public String toString() {
275+
return String.format("*.%s", extension);
276+
}
270277
});
271278
}
272279

@@ -278,11 +285,30 @@ public static RequestPredicate pathExtension(String extension) {
278285
* file extension
279286
*/
280287
public static RequestPredicate pathExtension(Predicate<String> extensionPredicate) {
281-
Assert.notNull(extensionPredicate, "'extensionPredicate' must not be null");
282-
return request -> {
283-
String pathExtension = UriUtils.extractFileExtension(request.path());
284-
return extensionPredicate.test(pathExtension);
285-
};
288+
return new PathExtensionPredicate(extensionPredicate);
289+
}
290+
291+
/**
292+
* Return a {@code RequestPredicate} that matches if the request's query parameter of the given name
293+
* has the given value
294+
* @param name the name of the query parameter to test against
295+
* @param value the value of the query parameter to test against
296+
* @return a predicate that matches if the query parameter has the given value
297+
* @see ServerRequest#queryParam(String)
298+
* @since 5.0.7
299+
*/
300+
public static RequestPredicate queryParam(String name, String value) {
301+
return queryParam(name, new Predicate<String>() {
302+
@Override
303+
public boolean test(String s) {
304+
return s.equals(value);
305+
}
306+
307+
@Override
308+
public String toString() {
309+
return String.format("== %s", value);
310+
}
311+
});
286312
}
287313

288314
/**
@@ -294,10 +320,7 @@ public static RequestPredicate pathExtension(Predicate<String> extensionPredicat
294320
* @see ServerRequest#queryParam(String)
295321
*/
296322
public static RequestPredicate queryParam(String name, Predicate<String> predicate) {
297-
return request -> {
298-
Optional<String> s = request.queryParam(name);
299-
return s.filter(predicate).isPresent();
300-
};
323+
return new QueryParamPredicate(name, predicate);
301324
}
302325

303326

@@ -399,6 +422,56 @@ public String toString() {
399422
}
400423
}
401424

425+
426+
private static class PathExtensionPredicate implements RequestPredicate {
427+
428+
private final Predicate<String> extensionPredicate;
429+
430+
public PathExtensionPredicate(Predicate<String> extensionPredicate) {
431+
Assert.notNull(extensionPredicate, "Predicate must not be null");
432+
this.extensionPredicate = extensionPredicate;
433+
}
434+
435+
@Override
436+
public boolean test(ServerRequest request) {
437+
String pathExtension = UriUtils.extractFileExtension(request.path());
438+
return this.extensionPredicate.test(pathExtension);
439+
}
440+
441+
@Override
442+
public String toString() {
443+
return this.extensionPredicate.toString();
444+
}
445+
446+
}
447+
448+
449+
private static class QueryParamPredicate implements RequestPredicate {
450+
451+
private final String name;
452+
453+
private final Predicate<String> predicate;
454+
455+
public QueryParamPredicate(String name, Predicate<String> predicate) {
456+
Assert.notNull(name, "Name must not be null");
457+
Assert.notNull(predicate, "Predicate must not be null");
458+
this.name = name;
459+
this.predicate = predicate;
460+
}
461+
462+
@Override
463+
public boolean test(ServerRequest request) {
464+
Optional<String> s = request.queryParam(this.name);
465+
return s.filter(this.predicate).isPresent();
466+
}
467+
468+
@Override
469+
public String toString() {
470+
return String.format("?%s %s", this.name, this.predicate);
471+
}
472+
}
473+
474+
402475
static class AndRequestPredicate implements RequestPredicate {
403476

404477
private final RequestPredicate left;
@@ -428,6 +501,7 @@ public String toString() {
428501
}
429502
}
430503

504+
431505
static class OrRequestPredicate implements RequestPredicate {
432506

433507
private final RequestPredicate left;
@@ -463,6 +537,7 @@ public String toString() {
463537
}
464538
}
465539

540+
466541
private static class SubPathServerRequestWrapper implements ServerRequest {
467542

468543
private final ServerRequest request;

0 commit comments

Comments
 (0)