我最近在我的一个应用程序中解决了这个问题。我的网址看起来像这样。
/categories/{category}/subcategories/{subcategory}
我的问题是我想将每个 url 模式映射到一个 Java 类,这样我就可以调用正确的类来呈现数据。
我的应用程序使用 Netty,但 URL 解析器不使用任何第三方库。
这允许我做的是解析来自浏览器的 URL,生成具有键值对(在本例中为类别和子类别)的映射,以及为每个唯一 URL 模式实例化正确的处理程序. 总而言之,只有大约 150 行 Java 代码用于解析、应用程序设置和唯一 URL 模式的定义。
您可以在 GitHub 中查看解析器的代码:https ://github.com/joachimhs/Contentice/blob/master/Contentice.api/src/main/java/no/haagensoftware/contentice/util/URLResolver.java
UrlResolver.getValueForUrl 将返回一个 URLData,其中包含您需要的有关您的 URL 的信息:
https ://github.com/joachimhs/Contentice/blob/master/Contentice.api/src/main/java/no/haagensoftware/contentice/data /URLData.java
设置完成后,我可以将 URL 与 Netty 处理程序相关联:
this.urlResolver.addUrlPattern("/categories", CategoriesHandler.class);
this.urlResolver.addUrlPattern("/categories/{category}", CategoryHandler.class);
this.urlResolver.addUrlPattern("/categories/{category}/subcategories", SubCategoriesHandler.class);
this.urlResolver.addUrlPattern("/categories/{category}/subcategories/{subcategory}", SubCategoryHandler.class);
在我的处理程序中,我可以简单地获取参数映射:
String category = null;
logger.info("parameterMap: " + getParameterMap());
if (getParameterMap() != null) {
category = getParameterMap().get("category");
}
我希望这会有所帮助:)