Java 基于服务器端参数的带条件的Spring请求映射
我有一个控制器(SpringController),它将为移动应用程序提供json 各种服务器运行我们的软件。并非所有配置都将用于服务移动请求 我添加了一个Integer类bean,其id为一个包含处理请求所需的各种系统参数的对象 这个bean是用xml定义的,并自动连接到控制器中 自动连线使用(required=false),因此我们可以在没有xml中定义的值的情况下运行 我检查并发现,如果没有在xml中定义,自动连接的整数实际上是空的 我现在想做的是,在requestmappings中添加一种方法,如果该整数为null,那么它将匹配一个方法;如果该整数不为null,那么它将匹配常规方法(基本上,我们将使用标准的json错误对象进行回复) 这似乎对于某种AOP来说非常简单,但除了使用Spring之外,我几乎没有什么经验。Requestmapping注释中的大多数条件信息似乎基于请求参数,而不是服务器端变量Java 基于服务器端参数的带条件的Spring请求映射,java,spring-mvc,aop,Java,Spring Mvc,Aop,我有一个控制器(SpringController),它将为移动应用程序提供json 各种服务器运行我们的软件。并非所有配置都将用于服务移动请求 我添加了一个Integer类bean,其id为一个包含处理请求所需的各种系统参数的对象 这个bean是用xml定义的,并自动连接到控制器中 自动连线使用(required=false),因此我们可以在没有xml中定义的值的情况下运行 我检查并发现,如果没有在xml中定义,自动连接的整数实际上是空的 我现在想做的是,在requestmappings中添加一
有什么想法吗?我认为最好使用
属性占位符
从类路径加载属性文件。通过这种方式,您可以在不同的服务器中部署相同的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文档中编写的,在这里要解释的时间稍微长一点)。