2017-02-15 5 views
0

Anfrage an den Endpunkt mit dem folgenden Fehler fehl: obwohlFrühling @GetMapping mit @RequestParam und @RequestBody nicht mit HttpMessageNotReadableException

400 Bad request org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing

@GetMapping 
public List<SomeObject> list(@RequestParam(required = false) String parameter, @RequestBody String body, @RequestHeader("Authorization") String token) { 
..... 
} 

wenn @GetMapping würde geändert werden, um @PostMapping alles funktioniert wie ein Charme. Irgendwelche Ideen, was zum Teufel ist los?

HINWEIS: Swagger wird für die Anforderung Senden verwendet wird, so ist es ziemlich unwahrscheinlich, dass der Fehler in Locke ist

UPDATE: So sieht es aus wie Spring nicht @RequestBody für @GetMapping unterstützt. Ich kann immer noch nicht herausfinden, warum? @DeleteMapping mit @RequestBody funktioniert gut

Antwort

1

@RequestBody Annotation bindet den Inhalt gesendet (POST/PUT) Anfrage Körper mit der annotierten Variable. Da in der GET-Anforderung kein 'body'-Teil vorhanden ist, gibt spring HttpMessageNotReadableException aus, um dasselbe anzugeben.

Als allgemeine Regel können Sie nur @RequestBody für die Anfragen verwenden, die einen 'body'-Inhalt haben können, z. POST oder PUT.

+0

Hmmm .... aber GET kann auch Körper haben - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html Und Frühling ermöglicht RequestBody für GetMapping zu verwenden –

+0

Werfen Sie einen Blick auf diese Zeile, in dem gleichen Artikel - ** Sowohl HTTP GET und HTTP POST können verwendet werden, um die Suche mit Text auszuführen. Da nicht alle Clients GET mit body unterstützen, ist auch POST erlaubt. ** GET-Anfrage mit einem Body ist nach HTTP-Standard nicht korrekt. –

+0

Also, was ist der Punkt - Spring unterstützt RequestBody für GetMapping nicht? –

Verwandte Themen