首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring -泛型请求映射处理程序的多个PathVariable值

Spring -泛型请求映射处理程序的多个PathVariable值
EN

Stack Overflow用户
提问于 2014-11-07 22:18:37
回答 2查看 1.6K关注 0票数 2

我正在尝试实现一个分层分类树,它遵循下面的结构

代码语言:javascript
运行
复制
                                    term 1
                                    /    \
                                term 2  term 3
                                       /   |   \
                                 term 4 term 5  term 6

其中每个Term对象包含一个集合,该集合包含它下面的所有Term

传统上,使用url访问第三级术语。

代码语言:javascript
运行
复制
/term/chapter/section/paragraph 

Spring RequestMapping将由以下部分组成

代码语言:javascript
运行
复制
@RequestMapping(value = "/term/{term1}/{term2}/{term3}", method = RequestMethod.GET)
public Term getTerm(@PathVariable("term1") Term rootTerm, 
                    @PathVariable("term2") Term childTerm,
                    @PathVariable("term3") Term leafTerm) {

  /* Processing code here */

  return Term;

}

这样做的缺点是它明确地将分类树的高度限制为所请求的URL的指定处理程序的数量。在这种情况下,我被限制在高度为3的树上。

有没有一种内置的方法,可以将额外的Term URL标识符传递给一个方法,而不考虑子Term的数量?或者我必须在控制器中处理URL本身?

EN

回答 2

Stack Overflow用户

发布于 2014-11-07 23:05:08

也许你可以在解析时使用一个参数。

不是像这样指定一个url:

/term/depth1/depth2/.../dephtN

您可以指定格式约定并查询您的术语,如下所示:

/term/depth1-depth2-...-depthN

在您的控制器中,您可以解析URL:

代码语言:javascript
运行
复制
@RequestMapping(value = "/term/{query}", method = RequestMethod.GET)
public Term getTerm(@PathVariable String query) {

    // example access
    String[] parts = query.split("-");
    String chapterId = parts[0];
    String sectionId = parts[1];
    String paragraphId = parts[2];
    // ... to be continued

    /* Processing code here */

  return Term;
}
票数 0
EN

Stack Overflow用户

发布于 2014-11-07 23:25:39

我不认为你可以用path变量做到这一点。路径变量在REST URL中很好用,只要URL的systax是恒定的,并且您希望它可以扩展到任意数量的项。

我想你得回过头来请求参数。但幸运的是,Spring MVC非常友好,可以自动将索引参数转换为列表。你可以这样做:

代码语言:javascript
运行
复制
@RequestMapping(value = "/term", method = RequestMethod.GET)
public Term getTerm(@ModelAttribute TermPath termPath) {
//code
}

使用

代码语言:javascript
运行
复制
class TermPath {
    List<String> path;

    Term getTerm() { // extract the Term corresponding to the path
    ...
    }
    // getter and setter
}

并使用如下URL:/term?path[0]=chapter&path[1]=section&path[2]=paragraph...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26803258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档