2012-11-21 65 views
6

我有一個關於如何@RequestMapping和@RequestBody實際上woks.I有一個代碼如下所示有些疑惑:任何人都可以解釋@RequestMapping和@RequestBody是如何工作的?

@Controller 
public class CoreController { 
@Autowired 
LoggerExtension log; 
@Autowired 
DoService doService; 
    @RequestMapping(value="/method.do") 
public @ResponseBody String getActionResponse(HttpServletRequest request,HttpServletResponse response){   
    String action = request.getParameter("action");  
    String gender = request.getParameter("gender"); 
    String language = request.getParameter("language"); 
      if("getLanguage".equalsIgnoreCase(action)){ 
      returnResponse = doService.getUserLanguage(msisdn); 
      } 
    } 
     return returnResponse; 
     } 

我想知道如何在上面的代碼工作?請幫我清除這個概念......

回答

2

Spring文檔解釋了它非常好,爲@RequestMapping

您使用@RequestMapping註解將URL映射,如 /預約到整個類或特定的處理程序方法。

在特定情況下,@RequestMapping(value="/method.do")意味着一個http請求(以任何方式)到URI /method.do(例如http://myserver.com/app/method.do)將由註釋的方法getActionResponse(HttpServletRequest,HttpServletResponse)和Spring處理將自動綁定的參數。

至於@ResponseBody它說:

這個註解可以放在一個方法,並且指示返回 類型應該直接寫入HTTP響應主體

在您的具體情況,這意味着註釋方法的返回字符串將被寫入到響應輸出流或寫入器中,就像您調用類似如下內容一樣:

String result = getActionResponse(request, response) 
response.getWriter().print(result); //Suppose result is "en_US" or something 

ServletResponse#getWriter()ServletResponse#getOutputStream()

1

所以簡單地把它做的是在於,根據該「URL映射」在web.xml的xml文件表示

其追加「method.do」它

因此,例如: 我的應用程序的名稱是'你好」和下面是我的web.xml

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

現在你對你提到的URL將被localhost/rest/method.do

@RequestMapping是一種告訴處理servlet的方式,strign的響應是實際的響應。理想情況下,您將有一個輸出將被轉發的視圖。 但在這種情況下,你的反應是視圖,因此標註@RequestMapping

1

是什麼你看創建使用Spring一個WebService的方式。
@RequestMapping註釋將值中的路徑映射到方法。

所以(假設你的服務器是在本地主機上設置:8080,你的戰爭被命名爲「語境」),如果你撥打以下網址:

http://localhost:8080/war/method.do 

應用服務器和春季將調用getActionResponse方法對你類。

通常,getActionResponse的返回值將被視爲url,所以如果返回字符串'text',服務器將重定向到/ war/text。
@ResponseBody註釋告訴spring返回的字符串實際上應該作爲響應的消息返回,所以在進行調用之後,服務器將返回一個帶有消息正文「text」的200 OK響應。

編輯:忘了web.xml中的基本映射,參見Jatin的答案。 所以,而不是htt'p:// localhost:8080/war/method.do它將是htt'p:// localhost:8080/war/rest/method.do

+0

感謝您的回覆。很多。你告訴我,如果我不放@ResponseBody註解將會發生什麼,服務器的響應是什麼? –

+0

如果它是一個字符串,它會將其視爲重定向到的url。如果它是另一種類型的對象,我認爲你會得到一個異常。 –

相關問題