大三ノート(ajaxはjsonオブジェクトをcontrollerに渡し、controllerはjavaオブジェクトにカプセル化してデータベースに格納する)

3222 ワード

まず注釈を見てみましょう
@RequestBody 
1,@requestBody注記はcontent-typeがデフォルトのアプリケーション/x-www-form-urlcoded符号化の内容ではないことを処理するためによく使用されます.例えば、アプリケーション/jsonやアプリケーション/xmlなどです.一般的にアプリケーション/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文字列の2つの変数の値にそれぞれ2つの文字列が与えられます.しかし、もし私がUserクラスを持っていたら、次のフィールドを持っています:String userName;      String pwd; では、上記のパラメータは、@requestBody Userという形式でJSON文字列の値をuserの対応する属性に付与する場合に注意しなければならないのは、JSON文字列のkeyがuserの属性名に対応しなければならないことであり、そうでなければ要求は過去のものではないことである.
 3、
いくつかの特殊な場合@requestBodyはcontent-typeタイプがアプリケーション/x-www-form-urlcodedの内容を処理するためにも使用できますが、この方法にすぎません.
あまり一般的ではありませんが、このようなリクエストを処理する場合、@requestBodyは処理結果をMultiValueMapに格納します.この場合、jQuery easyUIのdatagridリクエストデータなど、特殊な場合に使用されるのが一般的です.スモールプロジェクトはPOJOクラスを1つだけ作成する場合にも使用できます.
 
 
しかし、実際には、controllerパラメータがオブジェクトの場合、フロントajaxからjsonデータが送られてきます.この場合のcontrollerも@RequestBodyを使用しなくてもいいです.
コードを見てみましょう.
UserController.java
	@RequestMapping("add")
	@ResponseBody
	public ResultVo 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  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);
          }
          
    
    
  });
}
  

これでもいいです.
もう一つ、mapperのinsert文は、パラメータがエンティティクラスの場合、insert文はすべて書き、insert into table(列名1、列名2....)values(......) このように書くと、列名を省略することはできません.以上です.