@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;\"> "+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;\"> <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;\"> <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;\"> <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.getMenuitemid())){
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);
}
}
}
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 异常 。。。 所以采用一中方式
相关推荐
Axios post两种请求方式与@RequestBody和@RequestParam接收.md
当一个带有`@RequestBody`注解的方法接收到JSON请求时,Jackson会将JSON数据转换为对应的`User`对象,然后传递给方法作为参数。 为了使Spring MVC支持`@RequestBody`处理JSON数据,我们需要在项目中添加Jackson库的...
@RequestBody与@Validated使用时校验失效.md
例如,你可以结合使用`@RequestBody`和`@ResponseBody`来创建一个接收JSON数据并返回JSON响应的方法,同时利用`@PathVariable`处理URL中的动态部分,实现灵活的路由控制。 在实际开发中,我们还需要了解如何配置...
浅析@ReponseBody和@RequestBody注解 @ReponseBody和@RequestBody是Spring MVC框架中两个重要的注解,分别用于处理HTTP请求和响应体。下面我们将详细分析这两个注解的作用和Spring MVC内部是如何对他们进行解析的。...
- **混用 `@RequestParam` 和 `@RequestBody`**: 示例代码中同时使用了 `@RequestParam` 和 `@RequestBody`,这是不推荐的,因为 `@RequestParam` 用于处理URL查询参数,而 `@RequestBody` 处理请求体。如果请求体...
这篇博客将深入探讨这两个注解的工作原理以及如何利用它们实现在Java对象与XML或JSON数据之间的自动转换。 `@RequestBody` 注解用于方法参数前,表示该参数将会从HTTP请求体中读取数据并进行绑定。这通常发生在POST...
如果默认的Converter不能满足需求,可以自定义实现HttpMessageConverter接口,然后通过`@Configuration`类和`WebMvcConfigurer`接口的`extendMessageConverters`方法添加到Spring MVC配置中。 ### 2. @ResponseBody...
Spring MVC 中@RequestParam 和@RequestBody 注解的使用详解 在 Spring MVC 中,@RequestParam 和@RequestBody 是两个常用的注解,用于处理前端传递来的参数。下面将详细介绍这两个注解的使用和区别。 一、@...
快速解决SpringMVC @...使用 @RequestBody 注解可以快速解决 SpringMVC 中的请求参数接收问题,但是需要注意一些细节,如使用 @RequestParam 注解,使用 getParameterMap() 方法,使用 JSON.stringify() 方法等。
为了解决这个问题,我们需要修改Controller的方法,使用@RequestBody注解来接收JSON数据: ```java @RequestMapping(value = "/getToken", method = RequestMethod.POST, consumes = "application/json;charset=UTF-...
spring cloud feign不支持@RequestBody+ RequestMethod.GET报错的解决方法 spring cloud feign是一种基于HTTP的服务调用方式,而在使用spring cloud feign时,我们可能会遇到不支持@RequestBody+ RequestMethod.GET...
Spring Boot @RequestBody 数据传递过程详解 Spring Boot 框架提供了多种方式来处理 HTTP 请求体中的数据,其中使用 @RequestBody 注解可以将请求体中的 JSON 数据自动转换为 Java 对象。下面将详细介绍 Spring ...
axios post 请求传递request-body request-query headers(get 或者不直接使用get、post使用axios 道理方法都类似,注意:get没有请求体,如果要用get方法,后端就不能用@requestBody来接收,相应可以改为@...
@ResponseBody 和 @RequestBody 注解的区别 在 Spring 框架中,@ResponseBody 和 @RequestBody 是两个常用的注解,它们都用于处理 HTTP 请求和响应,但是它们的作用和使用场景却有所不同。 一、@ResponseBody 注解...
本文将深入探讨如何使用`@RequestBody`来接收POST方式的JSON字符串。 首先,`@RequestBody`是Spring MVC中的一个注解,它的作用是从HTTP请求的主体中获取数据,并尝试将其转换为指定类型的对象。在处理JSON数据时,...
在IT行业中,构建高效、可扩展的Web应用是至关重要的,而Java作为后端开发的主流语言,常常结合各种框架来实现这一目标。本项目"Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输"就是一个很好的示例,它...
Spring MVC框架提供了强大的日志记录功能,对于日志记录的实现,Spring MVC提供了多种方式,本文将主要介绍如何使用RequestBodyAdvisor和ResponseBodyAdvisor来实现对@RequestBody和@Response的日志输出。...
使用@RequestBody标签接收json数据,参数类型不能用Sting 看这两个注解的作用 @RequestParam 是作用在形参列表上,RequestParam可以接受简单类型的属性,也可以接受对象类型。在前端传入的是json字符串,后台按字符...