1. 程式人生 > >@RequestBody 只能與@RequestHeader同用 不能與@RequestParam (實現迭代函式部分方法只調用一次,之後傳遞下去)

@RequestBody 只能與@RequestHeader同用 不能與@RequestParam (實現迭代函式部分方法只調用一次,之後傳遞下去)

@RequestBody  只能與@RequestHeader同用  不能與@RequestParam (實現迭代函式部分方法只調用一次,之後傳遞下去)

示例:

實現迭代函式部分方法只調用一次,之後傳遞下去,需要傳遞一些@controller前臺沒有的引數,又要保證前臺(jsp)能呼叫這個方法,用required=false,@RequestBody傳遞list,@RequestHeader彌補無法同時

使用@RequestParam

@RequestBody  只能與@RequestHeader同用  不能與@RequestParam 同用 如果有

@RequestParam配合模型驅動使用

@RequestBody 配合@RequestHeader使用,用於傳遞流(圖片,list等),流的優先順序高於普通的屬性(@RequestParam),流拿了之後馬山就關閉reuqest,所以@RequestParam無法取到傳過來的值

@RequestHeader就用來彌補用流的時候不能用@RequestParam 的情況

注意@RequestBody(required=false)屬性

 所有取值的本質request.getparamnter("");只是用了@之類的標籤幫你拿出來而已

參見

http://blog.csdn.net/kobejayandy/article/details/12690161

http://blog.sina.com.cn/s/blog_46debefc0101192j.html

http://www.cnblogs.com/chenxizhang/archive/2010/02/28/1675259.html

ajax中設定header的方式

 beforeSend: function(xhr){

        xhr.setRequestHeader('id', id);

        xhr.setRequestHeader('leave', leave);

        xhr.setRequestHeader('roleId', roleId);

        xhr.setRequestHeader('pId', pId);

        },

function appendTable() {

var roleId=$("input[name='roleId']").val();

var leave=$("input[name='leave']").val();

var pId=$("input[name='pId']").val();

var id=$("input[name='id']").val();

var dataParent = {

roleId: "1",

leave:"2",

pId:"3",

id:"5"

   };

$.ajax({

        type: "post",

        url: "${pageContext.request.contextPath}/system/opmRole/Auths",

        //data: dataParent,

       // headers:"{\"id\": \"1\",\"leave\":\"2\",\"roleId\":\"3\",\"pId\":\"5\"}",

        beforeSend: function(xhr){

        xhr.setRequestHeader('id', id);

        xhr.setRequestHeader('leave', leave);

        xhr.setRequestHeader('roleId', roleId);

        xhr.setRequestHeader('pId', pId);

        xhr.setRequestHeader('fg', "1");

        },

        //dataType: 'json',

        //contentType: "application/json",

        success: function (data) {

        if(data!=''&&data!=null){

        var div1=$("#div1");

        var table1=$("<table></table>");

        var arr = eval(data);

        for(j=0;j<arr.length;j++){

        if(arr[j].leave=='1'){

        var row =$("<tr></tr>");

        var td =$("<td></td>");

        td.append($(arr[j].str));

        row.append(td);

        table1.append(row);

        }

        var row2 ;

        if(arr[j].leave=='2'){

        row2 =$("<tr></tr>");

        var td =$("<td></td>");

        td.append(arr[j].str);

        row2.append(td);

        table1.append(row2);

        }if(arr[j].leave=='3'){

        var td =$("<td></td>");

        td.append(arr[j].str);

        table1.find("tr:last").append(td);

        }

        }

        div1.html(table1);

        }else{

        alert("你輸入的會員編號不存在!");

        }

        },

        error:function(data){

        alert("資料載入異常!");

        }

    }); 

}

@SuppressWarnings("rawtypes")

@RequestMapping(value="/system/opmRole/Auths")

@ResponseBody

public JSONArray treeRead(@RequestHeader(value="fg") String fg,@RequestHeader(value="id") String id,@RequestHeader(value="leave") String leave,@RequestHeader(value="roleId") String roleId,@RequestHeader(value="pId")  String pId,@RequestHeader(value="groupId",required=false)  String groupId1,@RequestBody(required=false) List<OpmRolelimit> o){

List<String> strl= new ArrayList<String>();

String str="";

JSONArray JsonArray = new JSONArray();

Map<String,Object> param = new HashMap<String,Object>();

param.put("pId", pId);

List<Map> map= opmMenufolderService.getfordMenuLimt(param);

if("1".equals(fg)&&id!=null&&!"".equals(id)){//迭代中只查一次,之後傳入

//查詢角色許可權表

System.out.println("==========查詢角色許可權表=======");

OpmRolelimit oo =new OpmRolelimit();

oo.setRoleid(id);

o=opmRolelimitService.getRoleLimt(oo);

fg="0";

}

Map<String,Object> param1 = new HashMap<String,Object>();

String groupId=groupId1;

for(Map p: map){

param1.put("pId", p.get("ID"));

String l= (String) p.get("LEAVE");

if("1".equals(l)){

if("100000".equals(p.get("PARENTID")+"")){

groupId=(String)p.get("ID");

   str+="<label style=\"float:left\"><input type=\"checkbox\" class=\"checkboxCtrl\" value="+p.get("ID")+" group="+groupId+" selectType=\"invert\" />"+p.get("NAME")+"</label>"+"\n";

   strl.add(str);

   JSONObject Json = new JSONObject();

   Json.put("ID", p.get("ID")+"");

   Json.put("NAME", p.get("NAME")+"");

   Json.put("groupId", groupId);

   Json.put("parentId", p.get("PARENTID"));

   Json.put("leave", l);

   Json.put("str", "<label style=\"float:left;width:150px;\"><input type=\"checkbox\" class=\"checkboxCtrl\" value="+p.get("ID")+"  onclick=\"checkedAllBox(this);\" group="+groupId+" //>"+p.get("NAME")+"</label>"+"\n");

   JsonArray.add(Json);

}else{

str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";

strl.add(str);

JSONObject Json = new JSONObject();

   Json.put("ID", p.get("ID")+"");

   Json.put("NAME", p.get("NAME")+"");

   Json.put("groupId",groupId);

   Json.put("parentId", p.get("PARENTID"));

   Json.put("leave", l);

   Json.put("str","<label style=\"width:150px;\">&nbsp;&nbsp;&nbsp;"+p.get("NAME")+"</label>"+"\n");

   JsonArray.add(Json);

}

}

if("2".equals(l)){

if(Integer.valueOf(leave)<0){

if(Integer.valueOf(p.get("LEAVE1")+"") >=Integer.valueOf(leave)){

str+="<label><input type=\"checkbox\" value="+p.get("ID")+"  name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";

strl.add(str);

JSONObject Json = new JSONObject();

   Json.put("ID", p.get("ID")+"");

   Json.put("NAME", p.get("NAME")+"");

   Json.put("groupId", groupId);

   Json.put("parentId", p.get("PARENTID"));

   Json.put("leave", l);

   String bs ="<label style=\"width:150px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" value="+p.get("ID")+"  name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n";

   if(o!=null){

   for(OpmRolelimit k : o){

   if( (p.get("ID")+"").equals(k.getMenuitemid())){

   bs ="<label style=\"width:150px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" value="+p.get("ID")+" checked=\"checked\"  name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n";

       break;

   }

   }

   }

   Json.put("str",bs);

   JsonArray.add(Json);

}

}else{

//TODO

Map<String,Object> param2 = new HashMap<String,Object>();

param2.put("menuItemId", p.get("ID"));

param2.put("menuItemLimitId", null);

param2.put("roleId", roleId);

param2.put("displayOrder", Integer.valueOf(-1));

List<OpmRolelimit> rl= opmRolelimitService.getRoleLimitByTJ(param2);

if(rl!=null&&rl.size()>0&&Integer.valueOf(p.get("LEAVE1")+"") >=Integer.valueOf(leave)){

str+="<label><input type=\"checkbox\" value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";

strl.add(str);

JSONObject Json = new JSONObject();

   Json.put("ID", p.get("ID")+"");

   Json.put("NAME", p.get("NAME")+"");

   Json.put("groupId", groupId);

   Json.put("parentId", p.get("PARENTID"));

   Json.put("leave", l);

//    Json.put("str","<label style=\"width:150px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");

   String bs ="<label style=\"width:150px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" value="+p.get("ID")+"  name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n";

   if(o!=null){

   for(OpmRolelimit k : o){

   if( (p.get("ID")+"").equals(k.getMenuitemid())){

   bs ="<label style=\"width:150px;\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"checkbox\" value="+p.get("ID")+" checked=\"checked\"  name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n";

       break;

   }

   }

   }

   Json.put("str",bs);

   JsonArray.add(Json);

}

}

}

if("3".equals(l)){

Map<String,Object> param2 = new HashMap<String,Object>();

param2.put("menuItemId", p.get("PARENTID"));

param2.put("menuItemLimitId", p.get("ID"));

param2.put("roleId", roleId);//當前登入使用者角色Id

param2.put("displayOrder", null);

List<OpmRolelimit> rl2= opmRolelimitService.getRoleLimitByTJ(param2);

String tempg=groupId;

if(rl2!=null&&rl2.size()>0){

str+="<label><input type=\"checkbox\"  value="+p.get("ID")+" name="+groupId+"/>"+p.get("NAME")+"</label>"+"\n";

strl.add(str);

JSONObject Json = new JSONObject();

   Json.put("ID", p.get("ID")+"");

   Json.put("NAME", p.get("NAME")+"");

   Json.put("groupId", groupId);

   Json.put("parentId", p.get("PARENTID"));

   Json.put("leave", l);

//    Json.put("str","<label style=\"width:150px;\"><input type=\"checkbox\"  value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n");

   String bs ="<label style=\"width:150px;\"><input type=\"checkbox\"  value="+p.get("ID")+" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n";

   if(o!=null){//許可權樹的反顯

   for(OpmRolelimit k : o){

   if( (p.get("ID")+"").equals(k.getMenuitemlimitid())){

   bs ="<label style=\"width:150px;\"><input type=\"checkbox\"  value="+p.get("ID")+" checked=\"checked\" name='"+groupId+"'/>"+p.get("NAME")+"</label>"+"\n";

       break;

   }

   }

   }

   Json.put("str",bs);

   JsonArray.add(Json);

}

}

//str+=treeRead(leave,roleId,p.get("ID")+"",groupId);

JsonArray.addAll(treeRead(fg,id,leave,roleId,p.get("ID")+"",groupId,o));

}

return JsonArray;

}

==========================================================

@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;

示例程式碼:

[java] view plaincopy

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

public void handle(@RequestBody String body, Writer writer) throws IOException {  

  writer.write(body);  

}  

@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用來指示引數是否必須繫結;

示例程式碼:

@RequestHeader("userId") Long userId, @RequestBody CaseCommitBean caseCommitBean, 可以放在一起使用

但是@RequestParam不能和@RequestBody一起使用不能同時使用,如果是流的形式與(比如json) 只能讀取一次,到時候就會發生 stream close 異常 。。。 所以採用一中方式

表面是 error/defaulterror 的 view ,但是內容的錯誤時 

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

因為 用Get 獲得資料 沒有問題,現在用的是post 出入json  .一直有問題,

找了好久才發現

function adduser(){

                 var url=".."+"/userses";

                $.ajax({

                  type: "POST",

                  async: false,

                  url:url +"/add",

                  dataType:"html",

                  contentType: "application/json",

                  data:JSON.stringify({

                      loginName:        'loginName',

                      password:            'password',

                      userId:            'userId',

                      email:            'email',

                      }),

                  success:function(data){

                       var  jsonstr = eval_r(data);

                  }

           });

通過進入spring web 的除錯也大概知道內部的東西了, spring 真不愧是很多內容想法集合到一起的容器。呵呵  你也能做到,以前猜測 hibernate 內部用的弱引用,剛才除錯看到 spring mvc用到的也是。

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

    @ResponseBody

    public Map<String,String> addUsers(

            //HttpEntity< User> user,

            @RequestBody User user2

            //@RequestParam(value = "loginName", required = true)String loginName,

            //@RequestParam(value = "password", required = true)String password,

            //@RequestParam(value = "userId", required = true)String userId,

            //@RequestParam(value = "email", required = true)String email

            ){

        userservice.getUserById(user2.getUserId());

        Map<String,String> result = new HashMap<String,String>();

        result.put("result", "true");

        return result;

    }

註釋上面中的幾種吧 request 內容 對映到的對應的哦 變數中,不能同時使用,如果是流的形式與(比如json) 只能讀取一次,到時候就會發生 stream close 異常 。。。 所以採用一中方式

相關推薦

@RequestBody 只能@RequestHeader 不能@RequestParam 實現函式部分方法調之後傳遞下去

@RequestBody  只能與@RequestHeader同用  不能與@RequestParam (實現迭代函式部分方法只調用一次,之後傳遞下去) 示例: 實現迭代函式部分方法只調用一次,之後傳遞下去,需要傳遞一些@controller前臺沒有的引數,又要保證前臺(jsp)能呼叫這個方法,用requi

Android高手進階教程(二十)之---AndroidJavaScript方法相互調

工程 orien lns asc eat element 加載 一個 creat 在Android中通過WebView控件,可以實現要加載的頁面與Android方法相互調用,我們要實現WebView中的addJavascriptInterface方法,這樣html才能調用a

RequestBody只能angularjspost提交json請求

public JsonModel register(@RequestBody User user, @RequestBody String code, HttpSession session) { //驗證碼校驗 if(session.getAttrib

ajax在同一頁面中控制器不同方法調數據並異步刷新的實例

lan rem ajax ear scrip 問題 效果圖 新的 來源 我在實習以來都有做一些筆記,之前做的筆記都在簡書裏,現在我提前把公司給我的任務做好了,坐在電腦前又不好玩別的,那麽我就整理下我之前的筆記吧!(此項目是thinkphp5開發的) 先上效果圖 這是整

C++資料結構STL--雙向迴圈連結串列實現自定義iterator類

class dLinkList {private:node<T> *head;  //頭節點size_t length; //連結串列長度void dInsert(node<T> *curr,T val)  //插入的輔助函式,把新節點插入curr前 {node<T>* t

泛型閉包實現

泛型for----->第一遍 10 20 30 40 50 泛型for----->第二遍 [[email protected] for]# cat for1.lua function iter( t ) local i = 0 r

C#方法調說明

不同 先生 clas 靜態方法 方法 運算 returns 使用實例 style 方法的調用:靜態:地址只分配一次。。。靜態的成員是與類一起生成的,所以有靜態成員的時候,非靜態成員還沒有生成,所以不能調用到 如果方法添加了static關鍵字,那麽就是

linux strace-跟蹤進程的系統調或是信號產生情況,lstrace-跟蹤己醜年調庫函數情況進程跟蹤調試命令

如何獲取 shel ++ 快速 靜態 exec 疑難雜癥 reat 案例 本工具可以用來做大多數排除,比如mount一個NFS,很慢,找不出原因,我們可以使用strace命令來跟中mount這個經常所有的調用過程。 strace 命令是一種強大的工具,它能夠顯示所有由

c#類的方法表的建立和方法調

方法覆蓋 cep 過程 final 提高 用法比較 stat 構造過程 調用方法 對於方法的調用,很是令我頭疼,什麽靜態方法,實例方法,實例虛方法,這裏查了很多資料,總結如下: 這裏聲明,我也是菜鳥,這裏只討論方法的調用相關的技術,屬於個人理解,如有錯誤,請指正 思路:

49.按鈕只能單擊鼠標事件

down html size src 嵌入 sna gif mouse utf 1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF

熟悉JS中的常用選擇器及屬性、方法調

model bower 文本 font [1] 選擇 val yellow width 選擇器、屬性及方法調用的配合使用: <style> #a{ width: 200px; he

【discuz x3】源碼中的sql調

clas 通過 uid fetch ont php程序 nbsp 表名 一個數據庫 一、可以直接在 "/source/include/" 文件夾及子文件夾中的php程序文件中直接使用如下方式從數據表獲取數據: //從pre_forum_groupuser表中通過 "so

Python的方法調

python 方法 首先放一張網上的圖:在類中定義的函數,有的稱為普通函數,有的稱之為方法,Python中有3中方法:實例方法、靜態方法、類方法。實例方法:函數必須有一個self參數類方法:需要有@ classmethod 修飾符,修飾符下面的函數就稱之為類方法,並且有個隱藏參數 cls。靜態方法:需

調騰訊優圖開放平臺進行人臉識別-Java調API實現

ace tno 開放平臺 term href max pre ant water ttp://open.youtu.qq.com官網 騰訊產品文檔 直接234. 第一步:鑒權服務技術方案 Java代碼實現如下 import java.util.Date;

js裏面如何才能讓成員方法調類中其他成員

import over best reply code relative padding 函數 oat function fun(){var _this = this;//如果函數是用var定義的私有函數,如下var func1 = function(){ }//那麽類中其

Javac之關於方法調1

eric true with pre arguments pub highlight div light 實例1: public class Test2{ public void m1(){} public void test(){ // javac war

C#碼中函數調相關問題

一個表 功能 數據 必須 static 人力 函數名 標識 之前 所謂的函數就是具有獨立功能的,並能通過名稱重復使用的代碼。函數要特別註意調用之前必先聲明。並且函數的聲明位置必須在類中。 函數聲明的語法是 static void 函數名()

java this 子類調父類父類再調子類已覆蓋的方法及屬性(又理解)

views args pop word per ews nds 如果 ext 之前一直以為 this關鍵字 是指調用者對象,但是這次才真正理解,this代表當前對象,但是指向調用者對象,其實就是多態的用法,如下所示:B 繼承了 A,在B 中調用A類的方法,在A 中用this

Wex5父子頁面方法相互調

xid ren pid load() 執行 parent body 過去 參數 父子頁面分為兩種,1.windowDialog 是彈出的子頁面,2.windowContainer 是內嵌的子頁面! 在子頁面中獲取父頁面的model對象 this.getParent() 或者

idea中查看方法調

font led mod 9.png body ont views width 按鈕 Eclipse的"Call Hierarchy"可以查看一個Java方法或類成員變量