SpringMvc的自動裝箱和GET請求參數可以為自定義對象的思考


  在我的概念里邊,GET請求需要加上注解@RequestParam,然后它的參數類型只能是 基本數據類型 或者 基本數據類型的包裝類,比如:@RequestParam String name(默認是必傳的),也可以不加@RequestParam 注解,其實就相當於@RequestParam(required = false)

  但是參數類型竟然是自定義對象,對象類里有不同的參數和get/set方法,而且沒有使用@RequestParam 注解,那么同樣也能實現GET請求

  比如一個請求方法是:public String login(User user) ,User.java類里有name 和password 兩個參數和get/set方法

  那么請求http://localhost:8080/login?name=admin&password=123456是完全沒問題的

 

自動裝箱理解 

  對Java自動裝箱、拆箱的理解是:裝箱就是自動將基本數據類型轉換為包裝器類型;拆箱就是自動將包裝器類型轉換為基本數據類型。
  對於springmvc來說,感覺它的自動裝箱,是將多個一般類型的參數轉換成一個對象,並賦值到對象里的變量

  那么這樣的請求參數如何限制是否必傳呢?這里可沒有(required = true),那就需要使用@Valid注解了,詳見:https://www.cnblogs.com/acm-bingzi/p/spring_valid.html

 

自動裝箱的缺點

  1、自動裝箱最直接的缺點就是效率低,不解釋
  2、我們知道url請求會放到RequestHeader 里,這個應該是有長度限制的,那么太長了肯定不合適。如果是POST請求的話,會放到RequestBody里面去,就不會有RequestHeader 過長的問題了
  3、如果對象里放的是List 類型的參數,那么這個應該如何在url 里進行GET請求呢?我問老大,他說要避免這種情形,使用JSON格式

 

POST請求的自動裝箱

  POST請求的參數,一般都加上注解@RequestBody,但是上例中的public String login(User user) 方法即使使用POST請求,依然是可以執行的

  網上搜了下么springmvc在post請求時使用與不使用@RequestBody注解的區別?

以下來自:http://blog.sina.com.cn/s/blog_1770bc6000102y6l6.html

  不使用@RequestBody注解時,可以接收Content-Type為application/x-www-form-urlencoded類型的請求所提交的數據,數據格式:aaa=111$bbb=222。form表單提交以及jQuery的$.post()方法所發送的請求就是這種類型。
  使用@RequestBody注解時,用於接收Content-Type為application/json類型的請求,數據類型是JSON:{"aaa":"111","bbb":"222"}

  

原創文章,歡迎轉載,轉載請注明出處!


免責聲明!

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



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