2017-08-05 32 views
0

如何訪問請求來自不同url-s的POST數據到一個控制器方法,例如我有/countries & /countries/{id} URL,它對第一個非常有用,我的代碼是如何將post方法應用於春季的所有請求映射

@RequestMapping(value = {"/{id}", "/{id}/"}, method = RequestMethod.GET) 
public String getCountry(@PathVariable(value = "id", required = true) int id,ModelMap model) { 

    } 

@RequestMapping(method = RequestMethod.POST) 
public String deleteCountry(ModelMap model,HttpServletRequest request) { 

    } 

當我嘗試從第二URL請求POST數據我得到

HTTP Status 405 - Request method 'POST' not supported 

,因爲我沒有這個映射POST方法這是可預期的,但只要我願意,成爲o的一種方法ne映射我的代碼會太醜螞蟻太可怕了,我能用什麼解決方案?

+0

我通過URL中的regexp找到了一個解決方案,這只是一種可能的方式嗎? – Nesquik27

+0

「醜陋可怕」 - 你必須以某種方式提供*實現*,對嗎?這是如何使你的代碼糟糕的? – chrylis

回答

3

哼,爲什麼不把值的「數組」添加到第二種方法呢?

@RequestMapping(value = {"", "/{id}"},method = RequestMethod.POST) 
public String deleteCountry(ModelMap model, 
          HttpServletRequest request) { 

順便說一句使用POST謂詞調用看起來像它會刪除該資源似乎是錯誤的行爲,它應該是一個DELETE動詞使用


編輯 但在現實中,你應該創建2種方法,因爲這兩種方法都不應該做同樣的事情。

POST/countries應建立國家資源

POST/countries/{id}應該做別的事情。

對於更新更喜歡PUT/countries/{id}

而對於刪除,喜歡DELETE/countries/{id}

+0

實際上,請求映射的值可以是「/ **」,我在google中沒有在url中找到任何正則表達式。刪除並放置方法?是的,這很好,不幸的是我的客戶想要沒有這些方法的RPC風格的東西。 – Nesquik27

+0

但是我不明白'/ countries'和''''''''在'/ countries/{id}'上的'POST'應該以同樣的方法結束,做同樣的事情。一個具有唯一的資源標識符,而不是另一個? – TheBakker

+0

那麼,如果我們想要在國家視圖圖層和單一國家視圖中放置刪除按鈕,我認爲這是網絡開發的優惠任務,沒有什麼特別的。 – Nesquik27

1

還有就是要對不同的控制器單獨的處理器攔截的一種方式。 詳情請參閱此鏈接。

bind Spring HandlerInterceptor only to one controller

但我覺得,這可能是好的,您可以創建共享業務邏輯一個常見的方法。 由於Interceptor爲您的控制器提供了代理類,除非您有複雜的邏輯,否則可以避免這種情況。