私は春のフレームワークを試しています。 RestControllerと関数があります:
@RequestMapping(value="/changePass", method=RequestMethod.POST)
public Message changePassword(@RequestBody String id, @RequestBody String oldPass,
@RequestBody String newPass){
int index = Integer.parseInt(id);
System.out.println(id+" "+oldPass+" "+newPass);
return userService.changePassword(index, oldPass, newPass);
}
およびangularJSのコード化
$scope.changePass = function(){//changePass
$scope.data = {
id: $scope.userId,
oldPass:$scope.currentPassword,
newPass:$scope.newPassword
}
$http.post("http://localhost:8080/user/changePass/", $scope.data).
success(function(data, status, headers, config){
if(date.state){
$scope.msg="Change password seccussful!";
} else {
$scope.msg=date.msg;
}
})
.error(function(data, status, headers, config){
$scope.msg="TOO FAIL";
});
}
そして、私がそれを実行するとき。
エラーメッセージ :
Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public com.csc.mfs.messages.Message com.csc.mfs.controller.UserController.changePassword(Java.lang.String,Java.lang.String,Java.lang.String)
修正してください...
問題はこのコードにあります。
@RequestBody String id, @RequestBody String oldPass,
@RequestBody String newPass
同じメソッドに複数の
@RequestBody
を含めることはできません。1つのオブジェクトにのみバインドできるためです(本体は1回しか使用できません)。
アプローチ1:
その問題の解決策は、関連するすべてのデータをキャプチャするオブジェクトを1つ作成し、引数にあるオブジェクトを作成することです。
あなたのための1つの方法は、以下のようにすべてを単一のJSONに埋め込むことです
{id:"123", oldPass:"abc", newPass:"xyz"}
そして、以下のようにコントローラーを単一のパラメーターとして使用します
public Message changePassword(@RequestBody String jsonStr){
JSONObject jObject = new JSONObject(jsonStr);
.......
}
アプローチ2:
ArgumentResolver
の独自のカスタム実装を作成します