2012-11-21 12 views
6

mam pewne wątpliwości dotyczące w jaki sposób @RequestMapping i @RequestBody faktycznie woks.I posiada kod, który przedstawia się następująco:Czy ktoś może wyjaśnić, jak działa @RequestMapping i @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; 
     } 

Chcę wiedzieć, w jaki sposób powyższy kod działa? Proszę mi pomóc to wyjaśnić pojęcia ...

Odpowiedz

2

Dokumentacja Wiosna wyjaśnia to bardzo dobrze, bo @RequestMapping

można użyć adnotacji @RequestMapping do mapowania adresów takich jak /nominacje na cała klasa lub konkretna metoda obsługi.

W określonych przypadkach, @RequestMapping(value="/method.do") oznacza, że ​​żądanie http (w dowolny sposób) do URI /method.do (np http://myserver.com/app/method.do) są obsługiwane przez opatrzony sposób getActionResponse(HttpServletRequest,HttpServletResponse) i sprężyna wiążą parametry automatycznie.

chodzi o @ResponseBody mówi:

Ta adnotacja można umieścić na metody i wskazuje, że zwracany typ powinien być napisany prosto do korpusu odpowiedzi HTTP

W Twoim konkretnym przypadku oznacza to, że zwracany ciąg opatrzony adnotacją metody zostanie zapisany w strumieniu wyjściowym odpowiedzi lub pisarzu, tak jak w przypadku wywoływania czegoś takiego:

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

Zobacz ServletResponse#getWriter() lub ServletResponse#getOutputStream()

1

Więc po prostu to, co robi jest to, że jak na „mapowanie url” wyrażona w pliku xml swojej web.xml

Dołącza „method.do” do niego

Tak na przykład: Nazywam aplikacja jest `Hello” i poniżej jest moim web.xml

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

teraz Twój adres URL wymienione będą localhost/rest/method.do

@RequestMapping to sposób informowania serwletu obsługi, że odpowiedź struny jest faktyczną odpowiedzią. Idealnie będzie mieć widok, do którego wyjście zostanie przekazane. Ale w tym przypadku, gdy odpowiedź jest pogląd, stąd adnotacja @RequestMapping

1

co się patrzy na to sposób, aby utworzyć WebService przy użyciu Wiosna.
Adnotacja @RequestMapping mapuje ścieżkę w wartości do metody.

Tak (Zakładając, że serwer jest ustawiony na localhost: 8080 a wojna jest nazwany „kontekst”) jeśli zadzwonisz następujący adres URL:

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

serwer aplikacji i wiosna będzie wywołać metodę getActionResponse na swoje klasa.

zwykle wartość zwracana getActionResponse byłaby traktowana jako adres URL, więc jeśli zwrócisz tekst "String", serwer przekieruje do/war/text.
Adnotacja @ResponseBody informuje wiosnę, że zwracany ciąg powinien zostać zwrócony jako komunikat odpowiedzi, więc po nawiązaniu połączenia serwer zwróci odpowiedź 200 OK z treścią wiadomości "tekst".

edytuj: zapomniałem o podstawowym odwzorowaniu w web.xml, zobacz odpowiedź Jatina. , więc zamiast adresu htt'p: // localhost: 8080/war/method.do będzie to htt'p: // localhost: 8080/war/rest/method.do

+0

Dziękuję za odpowiedź. Pomaga mi to dużo.możesz mi powiedzieć, co się stanie, jeśli nie wstawię adnotacji @ResponseBody, jaka będzie odpowiedź serwera? –

+0

Jeśli jest to ciąg, traktuje go jako adres URL do przekierowania. Jeśli jest to inny typ obiektu, myślę, że dostaniesz wyjątek. –

Powiązane problemy