SprigMVC Controller解析ajaxパラメータプロセス詳細


ajaxを使用して要求を送信する場合、送信されたJSONデータのパラメータがクラスの異なる属性である場合、Controller類の方法で@Request Body Object ojを使用すると、直接にobjオブジェクトにカプセル化されます。
たとえば:
先端部分コード
JavaScript

<script language="JavaScript">
  function login(){
    var user_name = $("#user_name").val();           //   
    var user_password = $("#user_password").val;      //    

    $.ajax({
      url:"<%=path%>/User/Login",
      type:"POST",
      async: false,
      contentType:"application/json;charset=UTF-8",
      dataType:'json',
      data:JSON.stringify({"user_name":user_name,"user_password":user_password}), // JSON       
      success:function(data){

      }
    });
  }
</script>
フォーム

<form>
  <div class="form-group">
    <label for="user_name" stype="display:inline;">   :</label>
    <input id="user_name" type="text" class="form-control" style="display:inline;" autocomplete="off" />
  </div>
  <div class="form-group">
    <label for="user_password" style="display:inline;">    :</label>
    <input id="user_password" type="text" class="form-control" style="display:inline;" autocomplete="off" />
  </div>
  <div class="col">
    <div class="col-md-4" style="text-align: right;">
      <button type="submit" class="btn btn-success" onclick="login()">  </button>
    </div>
  </div>
</form>
この時、先端が後端にJSONデータが入ってきます。
Userクラスの部分コード

public class User implements Serializable {
  private Integer user_name;            //   
  private String user_password;          //    
  ......
}
コントロラー部分コード

@Controller
@RequestMapping("/User")
public class UserController {

  @RequestMapping(value = "/Login",method = {RequestMethod.POST})
  public @ResponseBody Boolean Login(@RequestBody User user) {
    //  user.getUser_name()     user_name
    //user.getUser_password()     user_password
    //                           ,            
    ・・・・・・
    return true/false;
  }
この時ajaxが提出したJSONデータが
  data:JSON.stringify({"user_name":admin,"user_password":123)Controllerに出力文を追加します。

public @ResponseBody Boolean Login(@RequestBody User user) {
  System.out.println(user.getUser_name());
  System.out.println(user.getUser_password());
  ・・・・・・
  return true/false;
}
出力の結果は
 admin
 123
しかし、ajaxが送った要求体のパラメータが同じクラスの異なる属性ではない場合、どう処理すればいいですか?
たとえば:
フォームに認証コードが追加されました。verifycode。この場合、ajaxが提出したJSONデータがdata:JSON.stringify({"user_name":admin,"user_password":123,"verifycode":666})ただし、verifycodeはUser類の属性ではなく、@Request Body User userの中のuserでは受信できません。
@Request Body String bodyを採用すれば、出力はJSON文字列になります。

@RequestMapping(value = "/Login",method = {RequestMethod.POST})
  public @ResponseBody Boolean Login(@RequestBody String body) {
    //  body         
    System.out.println(body);
    //・・・・・・
  }
出力の結果は
  {"user_name":admin,"user_password":123,"verifycode":666}ただし、各パラメータの対応値を取得したい場合は、Map<String,String>mapで受信できます。

@RequestMapping(value = "/Login",method = {RequestMethod.POST})
  public @ResponseBody Boolean Login(@RequestBody Map<String,String> map) {
    //  map.get("user_name")     user_name
    System.out.println(map.get("user_name"));
    //map.get("user_password")     user_password
    System.out.println(map.get("user_password"));
    //map.get("verifycode")     verifycode
    System.out.println(map.get("verifycode"));
    ・・・・・・
  }
出力の結果は
 admin
 123
 666
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。