1. 程式人生 > >關於js傳各種型別引數到Controller層整理

關於js傳各種型別引數到Controller層整理

    做web開發的一直遇到一個問題怎麼發請求帶各種型別的引數到Controller層,每次都要測試好久才能請求成功。今天趁有空查資料總結鞏固一下。

一 .@RequestBody@RequestParam區別

[email protected]

用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容。(Http協議中,如果不指定Content-Type,則預設傳遞的引數就是application/x-www-form-urlencoded型別)

RequestParam可以接受簡單型別的屬性,也可以接受物件型別。 

實質是將Request.getParameter() 中的Key-Value引數Map利用Spring的轉化機制ConversionService配置,轉化成引數接收物件或欄位。

[email protected]

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

  • GET請求中,因為沒有HttpEntity,所以@RequestBody並不適用。
  • POST請求中,通過HttpEntity傳遞的引數,必須要在請求頭中宣告資料的型別Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的資料,然後繫結到相應的bean上。 

[email protected]

該註解有兩個用法,一個是用於方法上,一個是用於引數上;

用於方法上時:  通常用來在處理@RequestMapping之前,為請求繫結需要從後臺查詢的model;

用於引數上時: 用來通過名稱對應,把相應名稱的值繫結到註解的引數bean上;要繫結的值來源於:

A) @SessionAttributes 啟用的attribute 物件上;

B) @ModelAttribute 用於方法上時指定的model物件;

C) 上述兩種情況都沒有時,new一個需要繫結的bean物件,然後把request中按名稱對應的方式把值繫結到bean中。

二.一些常用的傳參型別

1.字串型別引數

/**
 * 傳遞字串引數
 */
getStringParam:function(){
   var param={"stringParams":hidden_input_value};
   //var param={};兩種方式都行
   // param.stringParams=hidden_input_value;
   $.ajax({
      url:basePath+"/ParamFormatController/getStringParam.shtml",
      data:param,
      type : 'POST',
      dataType : 'json',
      success:function(data){
         
      },
      
   })
},
Controller層
  /**
     * 接收字串型別引數
     * 
     * @param userName
     * @return
     */
    @RequestMapping("/getStringParam")
    @ResponseBody
    public String getStringParam(String userName) {
        String password = userService.getUserpassword(userName);
        return password;
    }

2.物件型別

/**
		 * 傳遞物件引數
		 */
		setObjectParam:function(){
			var objectParams={};
			objectParams.name="張三";
			objectParams.age="19";
			objectParams.sex="男";
			$.ajax({
				url:basePath+"/ParamFormatController/getObjectParam.shtml",
				data:objectParams,
				type : 'POST',
				dataType : 'json',
				success:function(data){
					
				},
			})
		},

    /**
     * 接收物件引數
     * 
     * @param
     * @return
     */
    @RequestMapping("/getObjectParam")
    @ResponseBody
    public void getObjectParam(Student objectParams) {
        System.out.println("姓名:" + objectParams.getName());
        System.out.println("性別:" + objectParams.getSex());
        System.out.println("年齡:" + objectParams.getAge());

    }

3.複雜物件型別

/**
		 * 傳遞複雜物件引數(包含id,username,String[],List<Person>)
		 */
		setHardObjectParam:function(){
			
			 var objectParams = {
	                    schoolName:"鵬峰中學",
	                    data:new Date(),
	                    teacherNames:["張老師","李老師","王老師"],
	                    students:[
	                        {name:"小明",sex:"男",age:"19"},
	                        {name:"小紅",sex:"男",age:"19"},
	                    ]
	                };
	                $.ajax({
	                    type: "POST",
	                    url:basePath+"/ParamFormatController/getHardObjectParam.shtml",
	                    data: JSON.stringify(objectParams),//重點
	                    contentType:"application/json"     //指定型別
	                })
		},

School類

public class School {
    private String[] teacherNames;
    private String schoolName;
    private Date data;
    private List<Student> students;



    public String[] getTeacherNames() {
        return teacherNames;
    }

    public void setTeacherNames(String[] teacherNames) {
        this.teacherNames = teacherNames;
    }

    public String getSchoolName() {
        return schoolName;
    }

    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }



}
Controoler
  /**
     * 接收復雜物件引數(包含id,username,String[],List<Person>)
     * 
     * @param
     * @return
     */
    @RequestMapping("/getHardObjectParam")
    @ResponseBody
    public void getHardObjectParam(@RequestBody School objectParams) {
        System.out.println("學校名:" + objectParams.getSchoolName());

    }
4.陣列與字串
/**
		 * 傳遞陣列與字串
		 */
		getArrayAndStringParam:function(){
			var pointCodes= new Array(); //定義一陣列  
			pointCodes.push("1");
			pointCodes.push("2");
			pointCodes.push("3");
			pointCodes.push("4");
	        $.ajax({  
	            url:basePath+"/ParamFormatController/getArrayAndStringParam.shtml",  
	            type:"POST",  
	            data:{"names":pointCodes,"id":'6'},  
	            dataType:"json",  
	            success:function(res){     
	            }
	            }); 
			
		},              
    /**
     * 接收陣列與字串
     * 
     * @param
     * @return
     */
    @RequestMapping("/getArrayAndStringParam")
    @ResponseBody
    public void getArrayAndStringParam(@RequestParam(value = "names[]") String[] names, String id) {
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }

    }
    
5.List字串集合
		/**
		 * 傳遞字串List引數
		 */
		getListByStringParam:function(){
				var orderNosList = new Array(); 
				orderNosList.push("List1");
				orderNosList.push("List2");
				orderNosList.push("List3");
				orderNosList.push("List4");
				$.ajax({
					url:basePath+"/ParamFormatController/getListByStringParam.shtml",
					data:{"StringList":orderNosList},
					type : 'POST',
					dataType : 'json',
					success:function(data){
						
					},
				})
			
		},
    /**
     * 接收字串List集合
     * 
     * @param
     * @return
     */
    @RequestMapping("/getListByStringParam")
    @ResponseBody
    public void getListByStringParam(@RequestParam("StringList[]") List<String> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

    }
6.List物件集合
    /**
     * 接收物件List集合
     * 
     * @param
     * @return
     */
    @RequestMapping(value = "/getListByObjectParam")
    @ResponseBody
    public void getListByObjectParam(@RequestBody List<Student> students) {
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println(s.getName());
        }

    }
/**
		 * 傳遞物件List引數
		 */
		getListByObjectParam:function(){
				 var param=[];
				 var data1={"name":"張三","age":"21","sex":"2"};
                                 var data2={"name":"李四","age":"24","sex":"2"};
                                 param.push(data1);
                                 param.push(data2);
				$.ajax({
					url:basePath+"/ParamFormatController/getListByObjectParam.shtml",
					data:JSON.stringify(param),
					type : 'POST',
					contentType: "application/json",
					success:function(data){
						
					},
				})
			
		},

後續型別在補充。


相關推薦

關於js各種型別引數Controller整理

    做web開發的一直遇到一個問題怎麼發請求帶各種型別的引數到Controller層,每次都要測試好久才能請求成功。今天趁有空查資料總結鞏固一下。一 .@RequestBody和@RequestPa

arcgis jsapi介面入門系列(3):各種型別的圖新增

這裡說的tomcat切片,是指arcgis server切片後,把切片圖片檔案用tomcat釋出(其他任意web伺服器釋出都行) //新增tomcat切片圖層 addTomcatTileLayer: function () { //圖層

遠端RMI呼叫介面時JSON型別引數失敗的解決辦法

一般情況下,遠端呼叫介面時傳的引數型別必須是經過序列化之後的類, 因為資料要在網路間傳輸,需要進行序列化,所以一般需要在介面間傳遞的物件都要實現Serializable介面,一些常用的String,int,long這些資料型別基本上都沒有問題,不過在傳json字串的時候有時

靈活使用AOP面向切面Aspect校驗Controller單個型別引數是否為空

我們經常註解使用對controller傳過來的引數進行判空校驗,但使用註解校驗的話常常會遇到controller層方法接收的必須是一個物件(實體類),而我們要校驗並使用的值只有一個或幾個,這樣就會導致判空會出現校驗不靈活的問題,只適合表單提交校驗比較合適,但對一個引數或幾個引

JS各種變數型別在條件判斷為false的情況

   var a = undefined; ->false var a = 0; ->false var a = 0.0; ->false var a = NaN; ->false var

SpringBoot圖片上(四) 一個input上N張圖,支援各種型別

簡單介紹:需求上讓實現,圖片上傳,並且可以一次上傳9張圖,圖片格式還有要求,網上找了一個測試了下,好用,不過也得改,僅僅是實現了功能,其他不盡合理的地方,還需自己打磨。 程式碼: //html<div class="col-md-12"> <label class="cont

JS 限制上檔案型別

直接上程式碼,網上看的,自己改了BUG。實測。 html程式碼 <input type="file" name="ksjh_file" class="ui_hidden" id="uploadksjh" accept="xls,xlsx" onchange="checkFileTy

js接收從另一個頁面的url過來的引數

function parseUrl(){ var url=location.href; var i=url.indexOf('?'); if(i==-1)return; var querystr=url.substr(i+1); var arr1=querys

ajax用post請求後臺controller實現前端後臺互動 兩個引數 ,後臺controller接收處理

PS→無奈:生氣,就是拿別人的過錯來懲罰自己。原諒別人,就是善待自己。  前臺jsp: $.ajax({ function getPage(page,size) { var postData={ "page":"1",

springboot專案之controller通過Model物件值到對應的返回頁面,返回頁面通過thymeleaf模板引擎來接收傳來的值

1.controller層的方法接收到請求後將返回borrowingBooks.html頁面,並將一個List物件res的值傳遞到borrowingBooks.html頁面。 @Controller

關於Springmvc+mybatis的controller接收引數的問題

今天在專案中發現,前臺請求後臺Controller層介面,因為少傳個引數,介面直接報500錯誤,debug 打斷點除錯發現根本不進方法塊,說明請求這個方法的時候發現沒有接收到值就直接報錯返回了,可是正常情況下 如果請求少傳引數是不會有這種問題的,只要不加註解限制都不會有這種問

springboot Restful風格Controller方法引數

@RestController @RequestMapping(value = "/users") public class UserController { /** * 建立執行緒安全的Map */ static Map<Long, User>

web前端——ajax提交後臺controller實現前端後臺互動(2) 兩個引數 ,後臺controller接收處理

前臺jsp: $.ajax({ function getPage(page,size) { var postData={ "page":"1", "keywordId":"26"

tp5 js參;thinkphp5 js跳轉參;thinkphp5 ajax返回引數跳轉

有的時候我們傳送ajax請求到後臺,然後返回一個動態的引數到url做跳轉,因為tp有專門的路由,直接將js帶入到tp路由去生成顯然不現實,這個時候只需要迂迴一下,先用tp自帶路由生成一個連線,然後再用js去替換即可 demo: $.post('{:url("home/me

(看完這篇保證你學會)springboot專案中 controller與前端的引數傳遞

首先講幾個註解的用法, @RequestParam: 用在方法的引數前面。 @RequestParam String a =request.getParameter("a")。 @PathVariable: 路徑變數。引數與大括號裡的名字一樣要相同。

SpringMVC頁面向Controller提交陣列+Mybatis多個引數+MySQL一次寫入多條記錄

DAO層定義:int insertRole2Authorities(@Param("roleId")int roleId, @Param("authorities")List<Integer&g

MVC controller傳遞引數到前端頁面

方法一: 使用Model類,以key-value的形式傳遞一些簡單的引數(示例為springboot專案中的方法,springboot預設的前端頁面檔案型別為HTML,位於 /專案名/src/main/resources/templates 下)  注意:return的內容

使用FormData進行Ajax請求上檔案到controller的實現

需求背景: 頁面上傳一個檔案到controller層,然後後臺對檔案進行處理。檔案型別不限。 第一種:單純的上傳檔案 頁面功能展現: 第一步:首先需要兩個jar commons-fileupload

springmvc controller接收jsp頁面過來的引數值到jsp頁面

接收值--四種方法: 第一種:引數直接寫在controller引數列表中 @RequestMapping("/test1.action")     public ModelAndView test1(String name){         System.out.prin

關於js向後臺json型別的多個物件 及後臺java接收並取出每一個物件中的值

<!-- 構建物件陣列--> var allTerminal = []; $(function(){ <!--繫結事件--> $('.addBtn').click(function(){