2012-11-21 10 views
6

ho qualche dubbio per quanto riguarda come fa @RequestMapping e @RequestBody realtà woks.I hanno un codice che è la seguente:Qualcuno può spiegare come funziona @RequestMapping e @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; 
     } 

Voglio sapere come fa il codice precedente funziona? Vi prego di aiutare a chiarire questi concetti ...

risposta

2

La documentazione primavera lo spiega molto bene, per @RequestMapping

Si utilizza l'annotazione @RequestMapping per mappare gli URL come /appuntamenti su un'intera classe o un particolare metodo di gestione.

Nel vostro caso specifico, @RequestMapping(value="/method.do") significa che una richiesta HTTP (in qualsiasi metodo) per l'URI /method.do (ad esempio http://myserver.com/app/method.do) sarà gestito dal annotato metodo di getActionResponse(HttpServletRequest,HttpServletResponse) e Spring legherà automaticamente i parametri.

Per quanto riguarda @ResponseBody si dice:

Questa annotazione può essere messo su un metodo e indica che il tipo di ritorno dovrebbe essere scritto direttamente al corpo della risposta HTTP

Nel vostro caso specifico , ciò significa che la stringa restituita del metodo annotato verrà scritta nel flusso di output della risposta o nel writer come se si stesse chiamando qualcosa del tipo:

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

Vedi ServletResponse#getWriter() o ServletResponse#getOutputStream()

1

Così semplicemente ciò che fa è che, come per la 'mappatura url' espresso nel file XML del vostro web.xml

E aggiunge "method.do" ad esso

Così, per esempio: mio nome dell'applicazione è `Ciao' e sotto è il mio web.xml

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

Ora il vostro URL del citato sarà localhost/rest/method.do

@RequestMapping è un modo di dire al servlet di gestione, che la risposta dello strign è la risposta effettiva. Idealmente avrai una vista a cui verrà inoltrato l'output. Ma in questo caso la risposta è la vista, da qui l'annotazione @RequestMapping

1

Che cosa il vostro guardando è il modo per creare un servizio Web utilizzando primavera.
L'annotazione @RequestMapping mappa il percorso nel valore del metodo.

Così (Supponendo che il server è l'installazione su localhost: 8080 e la tua guerra si chiama 'contesto') se si chiama il seguente URL:

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

il server di applicazione e la primavera sarà chiamare il metodo getActionResponse sul tuo classe.

normalmente il valore di ritorno di getActionResponse verrebbe trattato come un url, quindi se si restituisce il "testo" String, il server reindirizza a/war/text.
L'annotazione @ResponseBody indica che la stringa restituita deve essere effettivamente restituita come messaggio della risposta, quindi dopo aver effettuato la chiamata, il server restituirà una risposta di 200 OK con un "testo" del corpo del messaggio.

modifica: dimenticato la mappatura di base nel web.xml, vedere la risposta di Jatin. così invece di htt'p: // localhost: 8080/war/method.do sarebbe htt'p: // localhost: 8080/war/rest/method.do

+0

Grazie per la risposta. Questo mi aiuta molto. Puoi dirmi che cosa succederà se non metto l'annotazione @ResponseBody, quale sarà la risposta del server? –

+0

Se si tratta di una stringa, verrà trattato come un URL da reindirizzare a. Se si tratta di un altro tipo di oggetto, penso che otterrai un'eccezione. –

Problemi correlati