2016-05-24 6 views
0

So versuche ich, eine POST-Anfrage an eine lokale Spring MVC Projekt, aber jedes Mal, wenn ich versuche, bekomme ich 400: Bad Request, mit dem Fehler angegeben im Titel. Nicht sicher, warum, denn wenn ich überprüfe, was gesendet wird, ist es korrekt.Spring-Boot-REST - Erforderlich String-Parameter ist nicht vorhanden

Frühling REST-Controller Anfrage

@RequestMapping(value="/add", method = RequestMethod.POST) 
void addPet(@RequestParam String name, @RequestParam String photo, @RequestParam String status) { 
    Pet pet = new Pet(name, photo, status); 
    this.petRepo.save(pet); 
} 

AngularJS Anforderung sendet die Daten

$http({ 
     method: "post", 
     url: "http://localhost:8080/pet/add", 
     data:{ 
      name: angular.element("#name")[0].value, 
      photo: angular.element("#photo")[0].value, 
      status: angular.element("#status")[0].value 
     } 
    }).success(function(data, status) { 

     }) 
     .error(function(data, status) { 
      alert("Error"); 
      console.log(data); 
      console.log(status); 
     }); 

Front-End-HTML-Code, die AngularJS

<div class="form-group"> 
     <label for="name">Pet Name</label> 
     <input type="text" class="form-control" id="name"> 
    </div> 
    <div class="form-group"> 
     <label for="photo">Photo URL</label> 
     <input type="text" class="form-control" id="photo"> 
    </div> 
    <div class="form-group"> 
     <label for="status">Status</label> 
     <input type="text" class="form-control" id="status" placeholder="Something descriptive like 'Available' or 'Taken'"> 
    </div> 
    <div class="form-group"> 
     <div class="btn-group"> 
      <button type="button" class="btn btn-primary" ng-click="preview()">Preview</button> 
      <button type="button" class="btn btn-success" ng-click="submit()">Submit</button> 
      <button type="button" class="btn btn-danger" ng-click="clear()">Clear</button> 
     </div> 
    </div> 
+0

Die unten gepostete Antwort ist eine Verbesserung, da es nicht außerhalb der Richtlinien über die DOM-Manipulation zu tun angewiesen ist (in der Regel eine schlechte Sache), wenn Sie jQuery Selektoren fallen nicht funktionieren und wirklich mit, wie Winkel Richtlinien arbeiten müssen Sie selten die Selektoren (Kann in den meisten Fällen querySelector() verwenden, wenn Sie es benötigen). Auch gut zu beachten, Ihre Netzwerk-Panel Anfrage zu überprüfen, um die Nutzlast zu sehen (unten) und Antwort vom Server, auch gut mit Postman oder curl zu testen, Winkel- oder eine bestimmte Front zu nehmen aus der Gleichung beenden. – shaunhusain

+0

Öffnen Sie Ihre Browser-Netzwerk-Registerkarte, was ist in der Anfrage gesendet? –

+0

@SotiriosDelimanolis Name: "Pet" Foto: "https://i.ytimg.com/vi/tntOCGkgt98/maxresdefault.jpg" Status: "Verfügbar" –

Antwort

1

die Antwort gefunden. Ich folgte die Antwort von SSH oben für die Front-End, und für das Backend, änderte ich die Funktion:

void addPet(@RequestBody Pet pet) 
2

wie diese

versuchen Funktion ruft

und in dieser Controller Verwendung

$scope.form = {"name":"","photo":"","status":""} 
$http({ 
    method: "post", 
    url: "http://localhost:8080/pet/add", 
    data:{ 
     name: $scope.form.name, 
     photo: $scope.form.photo, 
     status: $scope.form.status 
    } 
}).success(function(data, status) { 

    }) 
    .error(function(data, status) { 
     alert("Error"); 
     console.log(data); 
     console.log(status); 
}); 
+0

Hat nicht funktioniert, gleicher Fehler –

+1

Welchen Unterschied macht das? Bitte klären Sie Ihre Antwort. –

+0

können Ihre Daten, die an den Server gesendet werden, nicht mit dem RequestParam-Feldtyp übereinstimmen. –

3

Sie verwenden @RequestParam im Backend aber in Winkel Sie die Werte in den Körper der setzen anfordern.

Sie müssen @RequestBody im Backend verwenden oder das Frontend anpassen, um die Werte in URL-Parameter zu setzen.

Verwandte Themen