@RequestBody和@RequestParam區別


@RequestParam

用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容。(Http協議中,默認傳遞的參數就是application/x-www-form-urlencoded類型)。RequestParam可以接受簡單類型的屬性,也可以接受對象類型。 實質是將Request.getParameter() 中的Key-Value參數Map利用Spring的轉化機制ConversionService配置,轉化成參數接收對象或字段。

Content-Type: application/x-www-form-urlencoded的請求中,@RequestParam可以獲取到get/post得值。

@RequestBody

處理HttpEntity傳遞過來的數據,一般用來處理非Content-Type: application/x-www-form-urlencoded編碼格式的數據。

GET請求中,因為沒有HttpEntity,所以@RequestBody並不適用。

POST請求中,通過HttpEntity傳遞的參數,必須要在請求頭中聲明數據的類型Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數據,然后綁定到相應的bean上。

總結

在GET請求中,不能使用@RequestBody。

在POST請求,可以使用@RequestBody和@RequestParam,但是如果使用@RequestBody,對於參數轉化的配置必須統一。

如果使用@RequestParam來接受參數,可以在接受參數的model中設置@DateFormat指定所需要接受時間參數的格式。

另外,使用@RequestBody接受的參數是不會被Servlet轉化統一放在request對象的Param參數集中,@RequestParam是可以的。

綜上所述,一般情況下,推薦使用@RequestParam注解來接受Http請求參數。

 

轉自:https://cloud.tencent.com/developer/article/1332866


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM