Kann ich @Requestparam annotation für eine Post-Anforderung?

Habe ich diese controller-Methode:

@PostMapping(
        value = "/createleave",
        params = {"start","end","hours","username"})
public void createLeave(@RequestParam(value = "start") String start,
                        @RequestParam(value = "end") String end,
                        @RequestParam(value = "hours") String hours,
                        @RequestParam(value = "username") String username){
    System.out.println("Entering createLeave " + start + " " + end + " " + hours + " " + username);
    LeaveQuery newLeaveQuery = new LeaveQuery();
    Account account = accountRepository.findByUsername(username);
    newLeaveQuery.setAccount(account);
    newLeaveQuery.setStartDate(new Date(Long.parseLong(start)));
    newLeaveQuery.setEndDate(new Date(Long.parseLong(end)));
    newLeaveQuery.setTotalHours(Integer.parseInt(hours));
    leaveQueryRepository.save(newLeaveQuery);
}

Aber wenn ich Sie senden eine post-Anforderung zu diesem Endpunkt erhalte ich folgende

"{"timestamp":1511444885321,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.UnsatisfiedServletRequestParameterException","message":"Parameter conditions \"start, end, hours, username\" not met for actual request parameters: ","path":"/api/createleave"}"

Wenn ich entfernen Sie die params-argument aus der @PostMapping annotation bekomme ich eine Allgemeine Fehlermeldung, er wird sagen, dass es nicht finden können, das erste erforderliche parameter (start), während es wirklich ist senden Sie zusammen mit den Parametern end -, Stunden-und Benutzernamen.

how to get param-Methode in post spring mvc?

Gelesen habe ich in diesem Beitrag, dass @RequestParam können nur verwendet werden für get-Methoden, aber wenn ich es entfernen @RequestParam und stick mit den params argument der @PostMapping Anmerkung es funktioniert immer noch nicht. Ich weiß, dass ich verwenden können @RequestBody aber ich will nicht, um eine Klasse, die nur für diesen 4 Parametern. Kann mir jemand sagen, wie ich diese Arbeit machen?

Danke

EDIT: ich lese hier https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#params--, dass das argument params nicht genau das, was ich dachte, es war. Es scheint, als Bedingung. Wenn ein Satz von Parametern entsprechen, einen Wert hat dann der Endpunkt-controller-Methode aktiviert werden.

  • Ausgehend von der Fehlermeldung und den code gepostet der code passt nicht zu der Ausnahme.
  • Dein Verständnis ist falsch. Sie können @RequestParam mit jeder Art von Anfrage. @RequestBody ist, wenn Sie post einen Körper (in JSON, XML etc), und wollen Sie es gemarshallt, um ein Objekt. Wenn Sie nur wollen, um die Parameter zu verwenden, dann @RequestBody ist ziemlich nutzlos. Aber die Bindung an ein Objekt sollte bevorzugt werden, die über getrennte Parameter, und für diese sollten Sie verwenden @ModelAttribute.
  • die anderen sagen @RequestParam kann nicht verwendet werden, mit post-Anfragen
  • Sie sind falsch... (geschrieben Haben 3 Bücher über das Thema ich bin mir ziemlich sicher, dass ich weiß, wovon ich spreche 🙂 ). Parameter sind Parameter, die unabhängig von der Methode verwendet, um Sie auf den server. Sie können auch verwendet werden, um die Parameter form, bei der Buchung ein Formular. Nun, wenn Sie würde das versenden JSON-das wäre eine andere Geschichte, da ist ein Körper und sollte analysiert werden, mit @RequestBody.
  • dann kommen wie bekomme ich einen Fehler wenn ich @RequestParam im obigen Beispiel? Was muss ich ändern, damit es funktioniert? Bitte erleuchte mich.
  • Der Fehler ist nicht über die @RequestParam aber die Bedingungen (die params im @RequestMapping) und wie gesagt ich denke, der code hier gepostet ist nicht der eigentliche code...

InformationsquelleAutor Maurice | 2017-11-23
Schreibe einen Kommentar