2013-07-03 81 views
1

我有一個控制器(Spring Controller),它可以爲移動應用提供json服務。基於服務器端參數的條件的彈簧請求映射

各種服務器運行我們的軟件。並非所有人都將被配置爲提供移動請求。

我已經添加了一個類Integer的bean,其中包含處理請求所需的各種系統參數的對象的id。

該bean在xml中定義並自動裝入控制器。

自動裝配使用(必需= false),所以我們可以運行沒有在xml中定義的值。

我已檢查並發現,如果未在xml中定義,自動裝訂的整數確實爲null。

我現在想要做的是添加到我的requestmappings中,以匹配一個方法,如果該整數是空的和常規方法,當整數不是null(基本上,我們會回覆一個標準的json錯誤對象)。

這看起來似乎對某種AOP來說非常簡單,但我除了使用Spring之外沒有什麼經驗。 Requestmapping註釋中的大多數條件信息似乎基於請求參數,而不是服務器端變量。

任何想法?

+0

攔截器呢? – zeroflagL

+0

有趣。我現在正在研究它,它似乎很適合這項法案。 – Zaan

回答

0

我認爲最好用property-placeholder從classpath加載一個屬性文件。通過這種方式,您可以在不同的服務器上部署相同的文件,併爲每個服務器使用不同的屬性文件(將其放入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 

,假別當。

+0

感謝您的回覆。我發現它回答了一個與我打算的不同的問題。事實是,我們有不同的配置文件與他們自己的上下文文件。以我擁有的方式定義一個bean可能不是百分百最好的方式,但它適合我們所擁有的。我真正想知道的是,如何調整請求映射,以便在每個控制器方法的開始處(如我已有的那樣)在開始時((啓用))檢查時避免複製粘貼。 – Zaan

+0

如果您對各種JSON的URL有通用模式,請查看Spring的[InterceptorHandler](http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html /mvc.html#mvc-config-interceptors),否則你應該使用AOP,因爲我試圖儘可能地避免AOP的方式,因爲在我看來,這太多了_magic_。但是通過這種方式,您還可以定義自己的方法註釋(類似'@ Mobile')並捕獲該方法的執行,(全部用Spring文檔編寫,稍後再解釋一下)。 – rascio