Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于服务器端参数的带条件的Spring请求映射_Java_Spring Mvc_Aop - Fatal编程技术网

Java 基于服务器端参数的带条件的Spring请求映射

Java 基于服务器端参数的带条件的Spring请求映射,java,spring-mvc,aop,Java,Spring Mvc,Aop,我有一个控制器(SpringController),它将为移动应用程序提供json 各种服务器运行我们的软件。并非所有配置都将用于服务移动请求 我添加了一个Integer类bean,其id为一个包含处理请求所需的各种系统参数的对象 这个bean是用xml定义的,并自动连接到控制器中 自动连线使用(required=false),因此我们可以在没有xml中定义的值的情况下运行 我检查并发现,如果没有在xml中定义,自动连接的整数实际上是空的 我现在想做的是,在requestmappings中添加一

我有一个控制器(SpringController),它将为移动应用程序提供json

各种服务器运行我们的软件。并非所有配置都将用于服务移动请求

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

这个bean是用xml定义的,并自动连接到控制器中

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

我检查并发现,如果没有在xml中定义,自动连接的整数实际上是空的

我现在想做的是,在requestmappings中添加一种方法,如果该整数为null,那么它将匹配一个方法;如果该整数不为null,那么它将匹配常规方法(基本上,我们将使用标准的json错误对象进行回复)

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


有什么想法吗?

我认为最好使用
属性占位符
从类路径加载属性文件。通过这种方式,您可以在不同的服务器中部署相同的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。

我认为最好使用
属性占位符
从类路径加载属性文件。通过这种方式,您可以在不同的服务器中部署相同的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。

拦截器呢?很有趣。我现在正在研究它,看起来它可能很适合这个项目。那么拦截器呢?很有趣。我现在正在研究它,它似乎很适合这个账单。谢谢你的回复。我发现它回答的问题与我想回答的有些不同。事实上,我们有不同的配置文件和它们自己的上下文文件。用我现有的方式定义bean可能不是100%最好的方式,但它符合我们现有的方式。我真正想知道的是我如何调整requestmapping,这样我就可以避免在每个控制器方法的开头使用相同的if(!enabled)检查来复制粘贴(就像我已经做过的那样)。如果您对各种JSON的URL有一个通用模式,请查看Spring的,否则您应该使用AOP,诚然,我尽量避免AOP方式,因为在我看来这太神奇了。但是,通过这种方式,您还可以定义自己的方法注释(类似于
@Mobile
)并捕获该方法的执行(这些都写在Spring文档中,这里的解释要长一点)。感谢您的回复。我发现它回答的问题与我想回答的有些不同。事实上,我们有不同的配置文件和它们自己的上下文文件。用我现有的方式定义bean可能不是100%最好的方式,但它符合我们现有的方式。我真正想知道的是我如何调整requestmapping,这样我就可以避免在每个控制器方法的开头使用相同的if(!enabled)检查来复制粘贴(就像我已经做过的那样)。如果您对各种JSON的URL有一个通用模式,请查看Spring的,否则您应该使用AOP,诚然,我尽量避免AOP方式,因为在我看来这太神奇了。但是,通过这种方式,您还可以定义自己的方法注释(类似于
@Mobile
)并捕获该方法的执行(这些都是在Spring文档中编写的,在这里要解释的时间稍微长一点)。