Spring-Boot-REST - Erforderliche String-parameter ist nicht vorhanden
So, ich bin versucht, zu einer POST-Anforderung an einen lokalen Spring-MVC-Projekt, aber jedes mal, wenn ich versuche, ich bekomme 400: Bad Request, mit dem Fehler in der angegebenen Titel. Nicht sicher, warum, weil, wenn ich überprüfen, was gesendet wird, ist es richtig.
Spring 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 der 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, ruft die AngularJS-Funktion
<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>
- Die Antwort unten geschrieben, ist eine Verbesserung, da es sich nicht auf tun, DOM-manipulation außerhalb der Richtlinien (in der Regel eine schlechte Sache), wenn Sie drop jQuery-Selektoren, die nicht arbeiten und wirklich mit wie angular-Direktiven Arbeit, die Sie nur selten benötigen, den Selektoren (können querySelector() in den meisten Fällen, wenn Sie es brauchen). Auch der Hinweis gut, überprüfen Sie Ihre Netzwerk-panel-Anfrage zu sehen, die Nutzlast (unten) und die Antwort vom server, auch gut zu testen mit Postboten oder curl zu nehmen, Winkel oder einer bestimmten front-end aus der Gleichung heraus.
- Öffnen Sie Ihren browser Registerkarte "Netzwerk", was gesendet wird, in der Anfrage?
- name:"Pet" Foto:"i.ytimg.com/vi/tntOCGkgt98/maxresdefault.jpg" status:"Verfügbar"
- Prüfung im Postbote gibt mir eine erfolgreiche Anfrage.
- hmm hmm hmm.... haben Sie durch Zufall einen externen proxy-Programm? (Charles web debugging proxy ist, was ich in der Regel verwendet, glauben, können Sie proxy-postman fordert eine zusätzliche Erweiterung oder auch etwas), wenn man beide XHR-Anfragen auf der Registerkarte Netzwerk können Sie mit der rechten Maustaste und speichern Sie die locken und dann mit diff um zu sehen, was sich verändert hat (wahrscheinlich einige junk-doch etwas ist anders, das ist wichtig) vielleicht einen header oder sonst was, es nicht zu analysieren, die Nutzlast ordnungsgemäß (für eine alliteration).
- Ich habe nicht eine, Nein
- Nur etwas bemerkt, wenn es einen Unterschied macht. In den Postboten, die Informationen an den server gesendet wird, eingetragen unter Body >> form-data
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit @RequestParam im backend, aber in der Winkel-Sie setzen die Werte in die Körper der Anfrage.
Verwenden Sie die @RequestBody im backend oder passen Sie das frontend die Werte in url-Parametern.
Fand die Antwort. Ich folgte SSH die Antwort von oben für das front-end, und für das backend, ich habe die Funktion:
versuchen, wie diese
und im controller verwenden Sie diese