2011-05-17 93 views
12

內解決視圖我添加了一個新的方法/映射到我的servlet之一:春天不能servlet的

@RequestMapping(value = "/user/prefs/order", method = RequestMethod.POST) 
public void updateUsersPrefs(@RequestBody Map<String, ArrayList> body, HttpServletRequest request) { 
    ... 
} 

但是當我將請求發送到這個網址我得到一個500內部服務器錯誤,用以下錯誤消息:

javax.servlet.ServletException: Could not resolve view with name 'user/prefs/order' in servlet with name 'appfinder' 
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1029) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

我不能爲我的生活看到爲什麼這是報道。有人能幫忙嗎?我還有更多我可以提供的信息,請讓我知道。

謝謝!

+2

而不是返回void,嘗試用所需的視圖名稱的String的回報。還有其他選項。 – DwB 2011-05-17 15:59:06

回答

31

Spring把@RequestMapping方法與void返回類型in the following manner

void - 如果該方法處理反應本身(通過直接寫入的響應內容,聲明類型ServletResponse/HttpServletResponse的參數用於該目的),或者如果視圖名稱應該通過RequestToViewNameTranslator(未在處理程序方法簽名中聲明響應參數)隱式確定。

因此,因爲沒有HttpServletResponse參數這種方法,春天假定您想通過RequestToViewNameTranslator確定視圖名稱。

如果不指定特定的RequestToViewNameTranslator在上下文中使用,那麼the default implementation kicks in which will

簡單地轉換傳入的請求到視圖名的URI。

如果不希望傳入的請求的URI被用作視圖名稱呢,你有幾種選擇:

  1. 配置自定義RequestToViewNameTranslator與行爲,你想
  2. 如果您希望直接寫入響應而不是查看分辨率,請將此參數添加到此方法的HttpServletResponse
  3. 將此方法的返回類型更改爲String,View, or ModelAndView`能夠在方法中指定視圖或視圖名稱。
+2

你有一個小的錯字:「因此,因爲沒有'HttpServletRequest'」應該「因此,因爲沒有'HttpServlet * Response *'」 – 2011-05-17 16:30:09

+0

@Costi謝謝,修正 – 2011-05-17 16:39:45

+0

這個問題解決了,非常感謝! – MeanwhileInHell 2011-05-23 13:10:08

4

我有這個問題,原因是我使用的是tile框架,並沒有提到tiles-def.xml中的視圖名稱。在配置tiles-def.xml之後,問題就解決了。

2

我也有這個問題。 我使用@ResponseBody註解解決了它。

像這樣:

@RequestMapping(value = "/user/prefs/order", method = RequestMethod.POST) 
@ResponseBody 
public void updateUsersPrefs(@RequestBody Map<String, ArrayList> body, HttpServletRequest request) { 
    ... 
}