2013-01-20 87 views
3

我有一個階控制器:斯卡拉Spring Web MVC框架

@Controller 
@RequestMapping(Array("/welcome")) 
class HelloController{ 

    @RequestMapping{val method = Array(RequestMethod.GET)} 
    def printWelcome(model: ModelMap) = { 
    println("IN: printWelcome(..)") 
    val greeting = new GreetingBean("Yo!", "Adam") 
    model.addAttribute("message", greeting); 
    "secure" // sends to the /jsf/secure.xhtml page 
    } 

    @RequestMapping{val value = Array("/greeting"), val method = Array(RequestMethod.GET)} 
    def greeting(model: ModelMap) = { 
    println("IN: greeting(..)") 
    val greeting = new GreetingBean("Greetings", "Davies") 
    model.addAttribute("greeting", greeting); 
    "greeting"; // sends to the /jsf/greeting.xhtml page 
    } 
} 

當我打電話http://localhost:8080/jsf-spring-guice/welcome顯示在控制檯消息IN: printWelcome(..)和正確的頁面導航到。

當我打電話http://localhost:8080/jsf-spring-guice/welcome/greeting我得到一個404錯誤。

我已經試過指定以不同的方式在問候方法@RequestMapping:

@RequestMapping{val value = Array("greeting"), val method = Array(RequestMethod.GET)} 
@RequestMapping{val value = Array("/greeting")} 
@RequestMapping(Array("/greeting")) 
@RequestMapping(Array("/greeting"), Array(RequestMethod.GET)) 

和反編譯後生成的類,它總是看起來不錯。但是,我總是得到確定與歡迎,並總是202 /歡迎/問候

的反編譯的Scala類有這樣的:

@RequestMapping({"/welcome"}) 

這:

@RequestMapping(value={"/greeting"}, method={org.springframework.web.bind.annotation.RequestMethod.GET}) 

我看不出有任何理由爲什麼這不應該工作。誰能幫忙?

+0

這是指定annotation..shouldn't的正確的方式它爲:'@RequestMapping(值=陣列(「/問候語」 ),method = Array(RequestMethod.GET)) –

+0

HelloController.scala:31:error:not found:value method @RequestMapping(value = Array(「/ greeting」),method = Array(RequestMethod.GET)) ^ –

回答

0

沒有檢查它並編譯,但@RequestMapping註釋的printWelcome方法也應該具有指定值,即使它是空的(「」)。

指定的值充當過濾器,這可能是問題的原因。

+0

'printWelcome'方法是可行的。現在在純Java中嘗試它。將發佈結果 –

0

已解決 ...但在Spring文檔中找不到答案。

情況是我在web.xml

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/welcome/*</url-pattern> 
</servlet-mapping> 

這意味着映射「@RequestMapping(陣列(‘/歡迎’))」沒有效果,並且對任何http://localhost:8080/jsf-spring-guice/welcome請求將通過標有方法處理@RequestMapping{val method = Array(RequestMethod.GET)}。一種默認get

線索是,當我輸入http://localhost:8080/jsf-spring-guice/welcome/welcome/greeting/時,調用標記爲@RequestMapping{val value = Array("/greeting"), val method = Array(RequestMethod.GET)}的方法。在這一點上,很明顯,雙welcome意味着什麼是錯誤的。

所以基本上,url-pattern作爲URL模式的預先修復(我們都知道),但問題在於具有簡單GET方法的控制器將作爲默認設置。

自我提醒不與相同的請求映射使用控制器作爲url-pattern