@Override public PathMapped<V> find(PathMappingContext mappingCtx) { return findsBest(mappingCtx, trie.find(mappingCtx.path()), pathMappingResolver); }
@Override public String path() { return delegate().path(); }
@Override protected PathMappingResult doApply(PathMappingContext mappingCtx) { final String path = mappingCtx.path(); if (!path.startsWith(prefix)) { return PathMappingResult.empty(); } return PathMappingResult.of(stripPrefix ? path.substring(prefix.length() - 1) : path, mappingCtx.query()); }
@Override protected PathMappingResult doApply(PathMappingContext mappingCtx) { return PathMappingResult.of(mappingCtx.path(), mappingCtx.query()); }
/** * {@inheritDoc} This method performs sanity checks on the specified {@code path} and calls * {@link #doApply(PathMappingContext)}. */ @Override public final PathMappingResult apply(PathMappingContext mappingCtx) { ensureAbsolutePath(mappingCtx.path(), "path"); return doApply(mappingCtx); }
@Override protected PathMappingResult doApply(PathMappingContext mappingCtx) { final Matcher matcher = pattern.matcher(mappingCtx.path()); if (!matcher.matches()) { return PathMappingResult.empty(); } if (paramNameArray.length == 0) { return PathMappingResult.of(mappingCtx.path(), mappingCtx.query()); } final PathMappingResultBuilder builder = new PathMappingResultBuilder(mappingCtx.path(), mappingCtx.query()); for (int i = 0; i < paramNameArray.length; i++) { builder.rawParam(paramNameArray[i], matcher.group(i + 1)); } return builder.build(); }
@Override protected PathMappingResult doApply(PathMappingContext mappingCtx) { final Matcher m = pattern.matcher(mappingCtx.path()); if (!m.matches()) { return PathMappingResult.empty(); } if (numParams == 0) { return PathMappingResult.of(mappingCtx.path(), mappingCtx.query()); } final PathMappingResultBuilder builder = new PathMappingResultBuilder(mappingCtx.path(), mappingCtx.query()); for (int i = 1; i <= numParams; i++) { final String value = firstNonNull(m.group(i), ""); builder.rawParam(int2str(i - 1), value); } return builder.build(); }
/** * Returns a summary string of the given {@link PathMappingContext}. */ static List<Object> generateSummary(PathMappingContext mappingCtx) { requireNonNull(mappingCtx, "mappingCtx"); // 0 : VirtualHost // 1 : HttpMethod // 2 : Path // 3 : Content-Type // 4~: Accept final List<Object> summary = new ArrayList<>(8); summary.add(mappingCtx.virtualHost()); summary.add(mappingCtx.method()); summary.add(mappingCtx.path()); summary.add(mappingCtx.consumeType()); final List<MediaType> produceTypes = mappingCtx.produceTypes(); if (produceTypes != null) { summary.addAll(produceTypes); } return summary; } }
@Override protected PathMappingResult doApply(PathMappingContext mappingCtx) { final Matcher matcher = regex.matcher(mappingCtx.path()); if (!matcher.find()) { return PathMappingResult.empty(); } PathMappingResultBuilder builder = null; for (String name : paramNames) { final String value = matcher.group(name); if (value == null) { continue; } if (builder == null) { builder = new PathMappingResultBuilder(mappingCtx.path(), mappingCtx.query()); } builder.rawParam(name, value); } return builder != null ? builder.build() : PathMappingResult.of(mappingCtx.path(), mappingCtx.query()); }
private void handleNonExistentMapping(ChannelHandlerContext ctx, DecodedHttpRequest req, VirtualHost host, PathAndQuery pathAndQuery, PathMappingContext mappingCtx) { final String path = mappingCtx.path(); if (path.charAt(path.length() - 1) != '/') { // Handle the case where /path doesn't exist but /path/ exists. final String pathWithSlash = path + '/'; if (host.findServiceConfig(mappingCtx.overridePath(pathWithSlash)).isPresent()) { final String location; final String originalPath = req.path(); if (path.length() == originalPath.length()) { location = pathWithSlash; } else { location = pathWithSlash + originalPath.substring(path.length()); } redirect(ctx, req, pathAndQuery, location); return; } } respond(ctx, req, HttpStatus.NOT_FOUND, null); }
@Override protected PathMappingResult doApply(PathMappingContext mappingCtx) { final String path = mappingCtx.path(); if (!path.startsWith(pathPrefix)) { return PathMappingResult.empty(); } final PathMappingResult result = mapping.apply(mappingCtx.overridePath(path.substring(pathPrefix.length() - 1))); if (result.isPresent()) { return PathMappingResult.of(path, mappingCtx.query(), result.pathParams()); } else { return PathMappingResult.empty(); } }
requireNonNull(pathMappingContext, "pathMappingContext").method(), pathMappingContext.path(), requireNonNull(pathMappingResult, "pathMappingResult").query(), request);