我正在尝试实现一个分层分类树,它遵循下面的结构
                                    term 1
                                    /    \
                                term 2  term 3
                                       /   |   \
                                 term 4 term 5  term 6其中每个Term对象包含一个集合,该集合包含它下面的所有Term。
传统上,使用url访问第三级术语。
/term/chapter/section/paragraph Spring RequestMapping将由以下部分组成
@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本身?
发布于 2014-11-07 23:05:08
也许你可以在解析时使用一个参数。
不是像这样指定一个url:
/term/depth1/depth2/.../dephtN
您可以指定格式约定并查询您的术语,如下所示:
/term/depth1-depth2-...-depthN
在您的控制器中,您可以解析URL:
@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;
}发布于 2014-11-07 23:25:39
我不认为你可以用path变量做到这一点。路径变量在REST URL中很好用,只要URL的systax是恒定的,并且您希望它可以扩展到任意数量的项。
我想你得回过头来请求参数。但幸运的是,Spring MVC非常友好,可以自动将索引参数转换为列表。你可以这样做:
@RequestMapping(value = "/term", method = RequestMethod.GET)
public Term getTerm(@ModelAttribute TermPath termPath) {
//code
}使用
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...
https://stackoverflow.com/questions/26803258
复制相似问题