54 public static Optional<Map<String, String>>
match(
final String pattern,
final String path) {
55 if (pattern ==
null || pattern.isBlank() || path ==
null || path.isBlank()) {
56 return Optional.empty();
58 if (
"/**".equals(pattern)) {
59 return Optional.of(Map.of());
62 final var patternSegments = split(pattern);
63 final var pathSegments = split(path);
64 if (patternSegments.size() != pathSegments.size()) {
65 return Optional.empty();
68 final var params =
new LinkedHashMap<String, String>();
69 for (
int i = 0; i < patternSegments.size(); i++) {
70 final var expected = patternSegments.get(i);
71 final var actual = pathSegments.get(i);
72 if (expected.startsWith(
"{") && expected.endsWith(
"}")) {
73 params.put(expected.substring(1, expected.length() - 1), actual);
76 if (!expected.equals(actual)) {
77 return Optional.empty();
81 return Optional.of(params);