2017-02-15 28 views
0

запрос к конечной точке не может со следующей ошибкой:Spring @GetMapping с @RequestParam и @RequestBody терпит неудачу с 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) { 
..... 
} 

если @GetMapping будет изменено на @PostMapping все работает как шарм, хотя. Любые идеи, что происходит?

Примечание: Кураж используется для отправки запроса, так что это весьма маловероятно, что ошибка в Curl

UPDATE: Так, похоже, весна не поддерживает @RequestBody для @GetMapping. Я все еще не могу понять, почему? @DeleteMapping с @RequestBody отлично работает

ответ

1

@RequestBody аннотация связывает содержимое отправленного (POST/PUT) тела запроса с аннотированной переменной. Поскольку в запросе GET нет части тела, пружина бросает HttpMessageNotReadableException, чтобы указать то же самое.

Как правило, вы можете использовать только @RequestBody для запросов, которые могут иметь содержимое «тела», например. POST или PUT.

+0

Хммм .... но GET также может иметь тело - https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-body.html И весна позволяет использовать RequestBody для GetMapping –

+0

Взгляните на эту строку, в той же статье - ** Оба HTTP GET и HTTP POST могут использоваться для выполнения поиска с помощью тела. Поскольку не все клиенты поддерживают GET с телом, POST также разрешен. ** Запрос GET с телом неверен в соответствии со стандартом HTTP. –

+0

Итак, в чем смысл - Spring не поддерживает RequestBody для GetMapping? –