`
y806839048
  • 浏览: 1107313 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

@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 异常 。。。 所以采用一中方式

分享到:
评论

相关推荐

    2023-04-06-项目笔记 - 第二百六十一阶段 - 4.4.2.259全局变量的作用域-259 -2025.09.19

    2023-04-06-项目笔记-第二百六十一阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.259局变量的作用域_259- 2024-09-19

    采用Spring+Struts2+Hibernate框架,实现一个仿天猫购物网站的web工程(毕设&课设&实训&大作业&竞赛&项

    项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。

    人工智能赋能数据中心的绿色节能策略

    本文阐述了人工智能在数据中心节能应用领域的理论与实践,通过介绍机器学习和基于物理机理模型的人工智能节能技术的应用情况,展示了如何利用AI技术来提升数据中心能源效率,减少PUE。并指出基于大数据分析的智能运维方法能优化数据中心冷却系统的运行状态,从而达成绿色节能目的;同时也强调了未来的节能系统发展趋势及标准化推进措施等重要方向。 适用人群:数据中心管理人员,环保工作者,信息和通信技术行业的专业人士。 使用场景及目标:适用于那些希望利用AI和其他技术优化其数据中心效能的企业;通过技术手段达到减少能耗、提升工作效率的目的。 其他:随着全球对环境友好技术的关注增加,在数据中心的建设和运维过程中融合AI等新技术已经成为必然趋势。

    基于java的网上球鞋竞拍系统设计与实现.docx

    基于java的网上球鞋竞拍系统设计与实现.docx

    C语言入门教程.zip

    【c语言入门】 静态库、动态链接库、include、makefile、io、文件操作函数、管道原理及应用、简单的数据结构

    基于java中药分类管理系统设计与实现.docx

    基于java中药分类管理系统设计与实现.docx

    基于频谱旋转ωk算法大斜视SAR动目标成像

    内容概要:文中针对大斜视SAR系统在动目标成像上遇到的各种问题,包括聚焦难、几何变形和交叉副瓣高等挑战,采用了一个融合了频谱旋转和稀疏化增强处理方式的新颖算法——频谱旋转ωk算法,进行了详细讨论并提供了一套完整解决方案。 适用人群:该研究对于SAR技术研究专家、学者、工程师有着特别的实际意义与价值。 使用场景及目标:本成果可应用于斜视角达到甚至超过七十度的高斜度SAR动目标成像系统中,提升动目标检测、定位、识别等能力。具体应用场景涵盖了战场态势监测、交通流量监管等多个领域。 本文通过详细的理论建模及仿真实验结果论证算法的有效可行性;此外,文中提及了未来在更高动态环境下SAR成像领域的扩展可能性。

    基于java的新闻发布系统设计与实现.docx

    基于java的新闻发布系统设计与实现.docx

    基于java的应急资源管理系统设计与实现.docx

    基于java的应急资源管理系统设计与实现.docx

    基于java的斗车交易系统设计与实现.docx

    基于java的斗车交易系统设计与实现.docx

    通感一体化在车联网中的应用前景与关键技术

    主要内容:文章探讨了随着6G通讯技术发展,将通感一体化应用于车联网的可能性及其带来的显著效果,尤其是在辅助自动驾驶、多车合作感知与控制、车路通感融合发展中的应用。通过阐述各方面的技术框架和细节(如波束管理和智能反射面技术),文中指出了车联网系统在实现高效率、安全性以及智能化管理上的关键突破。同时强调在实施中遇到诸如频带分配、信号混迭、硬件整合等现实挑战,并提出了未来发展方向。 适用人群:研究人员和开发人员,特别是从事车联网和新一代通讯技术支持的专业人士。 使用场景及目标:适用于车联网的研究和开发,目的是构建高效的交通通信系统,在实际使用中促进自动驾驶、智能交通管理系统等新技术落地,提高道路通行的安全性和效率。 相关背景与建议:本文对通感一体化的技术介绍深入浅出,并讨论了一系列技术前沿,包括智能反射技术的最新成果。阅读者应掌握一定的无线通讯基础知识,并能理解技术理论在工程实践里的潜在机遇与难题。

    #_ssm_156_mysql_高校设备管理系统_.zip

    均包含代码,文章,部分项目包含ppt

    #_ssm_098_mysql_个性化电子相册设计_.zip

    均包含代码,文章,部分项目包含ppt

    2019李宁跑步自媒体年度内容运营方案.pptx

    2019李宁跑步自媒体年度内容运营方案.pptx

    基于java的中国咖啡文化宣传网站的设计与实现.docx

    基于java的中国咖啡文化宣传网站的设计与实现.docx

    基于java的学生考勤管理设计与实现.docx

    基于java的学生考勤管理设计与实现.docx

    安卓开发:探索移动应用的无限可能

    安卓开发:探索移动应用的无限可能

    34521945-b0e9-461e-8b69-6436502dee5b-1.zip

    34521945-b0e9-461e-8b69-6436502dee5b-1.zip

    基于Servlet+JSP+JDBC的完整的用户信息操作-CRUD项目总结

    完整的项目源码(注意更换自己的数据库名,并且字段设置要一样)

    该GUI程序计算车轮与轨道接触时的一些具体数据.zip

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics