具有基于服务器端参数的条件的Spring Requestmapping

时间:2013-07-03 10:02:48

标签: java spring-mvc aop

我有一个控制器(Spring Controller),可以将json提供给移动应用程序。

各种服务器运行我们的软件。并非所有内容都配置为提供移动请求。

我添加了一个Integer类的bean,其对象的id包含处理请求所需的各种系统参数。

此bean在xml中定义并自动连接到控制器中。

自动装配使用(required = false),因此我们可以在没有xml中定义的值的情况下运行。

我已检查并发现如果未在xml中定义,则自动装配的Integer确实为null。

我现在要做的是添加到我的请求映射中,如果该Integer为null,则匹配一个方法;当Integer不为null时,将添加常规方法(基本上,我们将使用标准json错误回复对象)。

对于某种AOP来说,这似乎很简单,但除了使用Spring之外,我几乎没有什么经验。 Requestmapping注释中的大多数条件信息似乎都基于请求参数,而不是服务器端变量。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为最好使用property-placeholder从类路径加载属性文件。通过这种方式,您可以在不同的服务器中部署相同的 war 文件,并为每个服务器使用不同的属性文件(将其放在AS类路径中)。 一旦你这样做,你可以在你的控制器中使用一个变量(或者如果你想让控制器的代码保持干净,可以在拦截器中使用)并执行以下操作:

@Controller
public class MyController{
    @Value("${mobile.enabled}")
    private boolean mobileEnabled;

@RequestMapping("/mobile")
public Object json(){
    if (!mobileEnabled)
        throw new IllegalStateException("This server can't do it!");
    }
    //create the json
    return result;
}

一个属性文件,如:

mobile.enabled=true

如果要启用它,或者在不启用时为false。