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

首先来看一个注解

@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(......) 这样子写,不能省略列名。以上。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值