40 public static Optional<Map<String, String>>
match(
final String pattern,
final String path) {
41 if (pattern ==
null || pattern.isBlank() || path ==
null || path.isBlank()) {
42 return Optional.empty();
44 if (
"/**".equals(pattern)) {
45 return Optional.of(Map.of());
48 final var patternSegments = split(pattern);
49 final var pathSegments = split(path);
50 if (patternSegments.size() != pathSegments.size()) {
51 return Optional.empty();
54 final var params =
new LinkedHashMap<String, String>();
55 for (
int i = 0; i < patternSegments.size(); i++) {
56 final var expected = patternSegments.get(i);
57 final var actual = pathSegments.get(i);
58 if (expected.startsWith(
"{") && expected.endsWith(
"}")) {
59 params.put(expected.substring(1, expected.length() - 1), actual);
62 if (!expected.equals(actual)) {
63 return Optional.empty();
67 return Optional.of(params);