SprigMVC Controller解析ajaxパラメータプロセス詳細
ajaxを使用して要求を送信する場合、送信されたJSONデータのパラメータがクラスの異なる属性である場合、Controller類の方法で@Request Body Object ojを使用すると、直接にobjオブジェクトにカプセル化されます。
たとえば:
先端部分コード
JavaScript
Userクラスの部分コード
admin
123
しかし、ajaxが送った要求体のパラメータが同じクラスの異なる属性ではない場合、どう処理すればいいですか?
たとえば:
フォームに認証コードが追加されました。verifycode。この場合、ajaxが提出したJSONデータが
@Request Body String bodyを採用すれば、出力はJSON文字列になります。
admin
123
666
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
たとえば:
先端部分コード
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
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。