2012-05-04 115 views
1

我有一个弹簧(3.1)控制器的操作方法是这样的:我可以将多个URL映射到一个Action,更改布尔参数吗?

@RequestMapping(value="/{id}") 
public String myAction(@PathVariable("id") long someId) { ... } 

我要介绍一个布尔:

public String myAction(@PathVariable("id") long someId, boolean doBranch) { ... } 

但是,我想在此基础上的布尔要被设置URL中的方法被访问。换句话说,我想

/foo/123 => myAction(123,false) 
/debug/foo/123 => myAction(123,true) 

我知道我可以添加多个网址的RequestMapping注释,但我还没有见过的方式有映射本身影响参数,短传入参数或课程(/foo/123?doBranch=true")。

我能以某种方式轻松扩展Spring来做到这一点吗?或者那里已经有东西可以做到这一点?

+0

我们你的最终目标是什么?这听起来像一个坏主意...... – les2

+0

@ les2我想要一些方法返回额外的信息或诊断信息,并在不同的URL上有明确的分隔“命名空间”。话虽如此,安全并不是一个问题,只是干净的URL。 –

回答

4

我知道这是不是最优雅的方式,但:

@RequestMapping("/foo/{id}") 
public String myActionA(@PathVariable("id") long someId) { 
    return myAction(someId, true); 
} 
@RequestMapping("/debug/foo/{id}") 
public String myActionB(@PathVariable("id") long someId) { 
    return myAction(someId, false); 
} 

public String myAction(@PathVariable("id") long someId, boolean doBranch) { ... } 

简单的URL映射到调用与任何truefalse第三种方法2种不同的方法。

+0

我同意@jjinguy,有时候最简单的解决方案就是提供一些外观方法。 Facade方法也使得“调试”变体可以在调用常用的“myAction”方法之前/之后执行其他逻辑(记录等) –

相关问题