2017-03-11 2 views
2

Ich versuche Frühling Rahmen. Ich habe RestController und Funktion:Fehler: Erforderliche Anfrage Körper fehlt

@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); 
    } 

und Code 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"; 
     }); 
    } 

und wenn ich es laufen.

Fehlermeldung:

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) 

Hilfe me fix it, pls ...

Antwort

9

Ausgabe ist in diesem Code.

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

können Sie nicht mehr @RequestBody in derselben Methode haben, da es nur auf ein einzelnes Objekt binden kann (der Körper nur einmal verbraucht werden kann).

ANSATZ 1:

Abhilfe zu diesem Problem ein Objekt erstellen, das alle relevanten Daten erfassen wird, und als erstellen Sie die Objekte in den Argumenten haben.

für Sie Eine Möglichkeit ist, sie alle eingebettet in einem einzigen JSON zu haben, wie unter

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

und haben Ihren Controller als einzigen Parameter, wie unten

public Message changePassword(@RequestBody String jsonStr){ 

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

ANSATZ 2:

Erstellen Sie eine benutzerdefinierte Implementierung für ArgumentResolver

+0

hat es funktioniert. Vielen Dank, @mhasan –

+0

Plz Stimme und akzeptiere die Antwort, wenn Sie den Beitrag als erfolgreich finden !! – mhasan

Verwandte Themen