大三笔记(ajax传递json对象给controller,controller封装为java对象后存入数据库)

xiaoxiao2025-10-16  4

首先来看一个注解

@RequestBody 

  1、@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是application/xml等。一般情况下来说常用其来处理application/json类型。

  2、

    通过@requestBody可以将请求体中的JSON字符串绑定到相应的bean上,当然,也可以将其分别绑定到对应的字符串上。     例如说以下情况:     $.ajax({         url:"/login",         type:"POST",         data:'{"userName":"admin","pwd","admin123"}',         content-type:"application/json charset=utf-8",         success:function(data){           alert("request success ! ");         }     });注意上面的data是一个json字符串,而不是json对象     @requestMapping("/login")     public void login(@requestBody String userName,@requestBody String pwd){       System.out.println(userName+" :"+pwd);     }     这种情况是将JSON字符串中的两个变量的值分别赋予了两个字符串,但是呢假如我有一个User类,拥有如下字段:       String userName;       String pwd;     那么上述参数可以改为以下形式:@requestBody User user 这种形式会将JSON字符串中的值赋予user中对应的属性上     需要注意的是,JSON字符串中的key必须对应user中的属性名,否则是请求不过去的。

 3、

    在一些特殊情况@requestBody也可以用来处理content-type类型为application/x-www-form-urlcoded的内容,只不过这种方式

    不是很常用,在处理这类请求的时候,@requestBody会将处理结果放到一个MultiValueMap<String,String>中,这种情况一般在     特殊情况下才会使用,     例如jQuery easyUI的datagrid请求数据的时候需要使用到这种方式、小型项目只创建一个POJO类的话也可以使用这种接受方式。

 

 

但其实呢,当controller参数为对象时,前台ajax传过来一个json数据,这时候的controller也是可以不使用@RequestBody的,

下面看代码。

UserController.java

@RequestMapping("add") @ResponseBody public ResultVo<student> AddStudent(student stu){ System.out.println("add方法"+stu.getName()); student stu1 = new student(); stu1.setAge(stu.getAge()); stu1.setEmail(stu.getEmail()); stu1.setName(stu.getName()); stu1.setPassword(stu.getPassword()); stu1.setStudent_id(stu.getStudent_id()); stu1.setStage(stu.getStage()); stu1.setSex(stu.getSex()); stu1.setPhone(stu.getPhone()); ResultVo<student> resultVo = service.AddStudent(stu1); return resultVo; } function tijiao(){ var name= $("#name").val(); var age= $("#age").val(); var pwd =$("#password").val(); var sex= $("input[name='sex']:checked").val(); var phone= $("#phone").val(); var email = $("#email").val(); var stage= $("#stage option:selected").val(); var stu={ "student_id" :18999, "name": name, "age": age, "password": pwd, "sex": sex, "phone": phone, "email":email, "stage": stage } alert(stu); $.ajax({ type:'POST', url: '/myspringTest/add.do', data: stu, dataType:"json", success: function (data) { if(data.success){ console.log(data.result); } },error:function(data){ console.log(data.result); } }); } </script>

这样也是可以的。

另外提一点,mapper中的insert语句,当参数为一个实体类时,insert语句要写全,要insert into table(列名1,列名2.....) values(......) 这样子写,不能省略列名。以上。

转载请注明原文地址: https://www.6miu.com/read-5037997.html

最新回复(0)