2017-03-11 124 views
2

私は春のフレームワークを試しています。 私は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) 

は、plsは...

答えて

9

問題は、このコードであり、私はそれを修正するのに役立ちます。それだけで(本体は一度だけ消費することができます) 単一のオブジェクトにバインドできるよう

@RequestBody String id, @RequestBody String oldPass, 
                 @RequestBody String newPass 

あなたは、同じ方法で複数の@RequestBodyを持つことはできません。

アプローチ1:

対策その問題に関連するすべてのデータをキャプチャし、あなたは引数を持っているオブジェクトを作成するよります1つのオブジェクトを作成します。

あなたのための一つの方法は、

{id:"123", oldPass:"abc", newPass:"xyz"} 

以下のようにそれらを単一JSONに埋め込まれたすべてを持っているように、単一のパラメータとして、あなたのコントローラを持つことである2 APPROACH

public Message changePassword(@RequestBody String jsonStr){ 

     JSONObject jObject = new JSONObject(jsonStr); 
....... 
} 

以下:

独自のカスタム実装を作成してArgumentResolver

+0

それは働いた。どうもありがとう、@mhasan –

+0

あなたが成功したとしてポストを見つけたら、Plzの投票と答えを受け入れる! – mhasan

関連する問題