前台數據格式與后台接收格式總結


 

本文將分為兩部分講解:

1前台發送數據的格式

2spring后台接收數據的格式

一:前台發送數據的格式

目前作者知道的有三種:

multipart/form-data類型主要是上傳文件時用到;

application/x-www-form-urlencoded類型主要是普通表單如input,checkbox;
application/json類型主要是傳遞json數據用到,層次比較深的數據;
form的enctype屬性為編碼方式,常用有兩種:application/x-www-form-urlencoded和multipart/form- data,默認為application/x-www-form-urlencoded。

其中json,在js請求中使用較多,form表單數據可以直接json序列化 var queryArray = $(formElement).serializeArray();

也可以在k-v中的v中添加實際值,當然這個違背了form表單多個k-v的初衷,但是也可以實現

二spring后台接收數據的格式

handler method 參數綁定常用的注解,我們根據他們處理的Request的不同內容部分分為四類:(主要講解常用類型)

A、處理requet uri 部分(這里指uri template中variable,不含queryString部分)的注解:   @PathVariable;

B、處理request header部分的注解:   @RequestHeader, @CookieValue;

C、處理request body部分的注解:@RequestParam,  @RequestBody;

D、處理attribute類型是注解: @SessionAttributes, @ModelAttribute;

 

1當使用@RequestMapping URI template 樣式映射時, 即 someUrl/{paramId}, 這時的paramId可通過 @Pathvariable注解綁定它傳過來的值到方法的參數上。

@Controller  

@RequestMapping("/con/{var1}")  

 public class ConTestController {  

 

  @RequestMapping("/test/{var2}")  

  public void test(@PathVariable String var1, @PathVariable String var2) {      

   }  

 }  

2@RequestHeader、@CookieValue
@RequestHeader 注解,可以把Request請求header部分的值綁定到方法的參數上。

Host                    localhost:8080  

Accept                  text/html,application/xhtml+xml,application/xml;q=0.9  

Accept-Language         fr,en-gb;q=0.6,en;q=0.2  

Accept-Encoding         gzip,deflate  

Accept-Charset          ISO-8859-1,utf-8;q=0.6,*;q=0.2 

Keep-Alive              300  

 

@RequestMapping("/test.do")  

 public void test(@RequestHeader("Accept-Encoding") String encoding,  

                             @RequestHeader("Keep-Alive") int keepAlive)  {  

 

}  

3、@RequestParam, @RequestBody
@RequestParam 

A) 通過Request.getParameter() 獲取的String可直接轉換為簡單類型的情況( String--> 簡單類型的轉換操作由 ConversionService配置的轉換器來完成);

因為使用request.getParameter()方式獲取參數,所以可以處理get 方式中queryString的值,也可以處理post方式 中 body data的值;

B)用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容,提交方式GET、POST;

C) 該注解有兩個屬性: value、required; value用來指定要傳入值的id名稱,required用來指示參數是否必須綁定;

示例代碼:

 @Controller  

 @RequestMapping("/users")  

@SessionAttributes("user")  

public class UserController{  

@RequestMapping(method = RequestMethod.GET)  

  public String getUser(@RequestParam("userid") int userid, ModelMap model) {  

     model.addAttribute("userid", userid);  

     return "userPage";  

    }   

 

@RequestBody

該注解常用來處理Content-Type: 不是application/x-www-form-urlencoded編碼的內容,例如application/json, application/xml等;

它是通過使用HandlerAdapter 配置的HttpMessageConverters來解析post data body,然后綁定到相應的bean上的。

因為配置有FormHttpMessageConverter,所以也可以用來處理 application/x-www-form-urlencoded的內容,處理完的結果放在一個MultiValueMap<String, String>里,這種情況在某些特殊需求下使用,詳情查看FormHttpMessageConverter api;

示例代碼:

 @RequestMapping(value = "/test", method = RequestMethod.PUT)  

public void test(@RequestBody String requestbody, Writer writer) throws IOException {  

 writer.write(requestbody);  

 }  

 

4、@SessionAttributes, @ModelAttribute
@SessionAttributes:

該注解用來綁定HttpSession中的attribute對象的值,便於在方法中的參數里使用。

該注解有value、types兩個屬性,可以通過名字和類型指定要使用的attribute 對象;

示例代碼:

@Controller  

 @RequestMapping("/test.do")  

 @SessionAttributes("user")  

public class TestController{       

}  

 

@ModelAttribute

該注解有兩個用法,一個是用於方法上,一個是用於參數上;

用於方法上時:  通常用來在處理@RequestMapping之前,為請求綁定需要從后台查詢的model;

用於參數上時: 用來通過名稱對應,把相應名稱的值綁定到注解的參數bean上;要綁定的值來源於:

A) @SessionAttributes 啟用的attribute 對象上;

B) @ModelAttribute 用於方法上時指定的model對象;

C) 上述兩種情況都沒有時,new一個需要綁定的bean對象,然后把request中按名稱對應的方式把值綁定到bean中。

 

用到方法上@ModelAttribute的示例代碼:

 @ModelAttribute  

 public User addUser (@RequestParam String id) {  

  return userManager.findUser (id);  

}  


這種方式實際的效果就是在調用@RequestMapping的方法之前,為request對象的model里put(“user”, User );

 

用在參數上的@ModelAttribute示例代碼:

 @RequestMapping(value="/test", method = RequestMethod.POST)  

 public String getUser(@ModelAttribute User user) {  

 

}  

首先查詢 @SessionAttributes有無綁定的User對象,若沒有則查詢@ModelAttribute方法層面上是否綁定了User 對象,若沒有則將URI template中的值按對應的名稱綁定到User 對象的各屬性上。

 
---------------------
作者:MemoryMaple
來源:CSDN
原文:https://blog.csdn.net/u011073057/article/details/78809663
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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