Я использую Spring boot 2.1.3-RELEASE. В моем RestController я пытаюсь настроить метод PUT с одним PathVariable и RequestParam (application / x-www-form-urlencoded).
Однако, когда я называю это, ответ является неправильным запросом, потому что требуемый RequestParam отсутствует.
Я попытался изменить PutMapping на RequestMapping, поменять местами параметры и использовать синтаксис @RequestParam (value = "param2", required = false), но ничего не изменилось.
Любопытно, что работает PostMapping. Также удаление PathVariable работает.
Вот код RestController:
@PutMapping(value="/myurl/{param1}", consumes=MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public String myMethod( @PathVariable("param1") Integer param1, @RequestParam("param2") String param2);
Я называю метод следующим образом:
curl -X PUT \
http://localhost:8080/myurl/42 \
-H 'Accept: application/json' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'param2=myparam2value'
Ответ:
{
«отметка времени»: 1553613278534,
«статус»: 400,
«ошибка»: «Неверный запрос»,
"message": "Обязательный параметр String 'param2' отсутствует",
"путь": "/ myurl / 42"
}
Я ожидаю, что PUT работает так же, как POST, но, похоже, нет.
К сожалению, я не могу отправить параметры как QueryParam, поэтому я должен поддерживать тот же вызов запроса, потому что я реорганизую существующую конечную точку, которая работает именно таким образом.
Спасибо
EDIT
Я обнаружил, что это вызвано использованием HandlerInterceptorAdapter (через WebMvcConfigurer).
По какой-то причине около
org.springframework.web.util.ContentCachingRequestWrapper.getParameterValues
org.apache.coyote.Request.parameters не имеет содержимого, и генерируется исключение, поэтому оно работает только для POST, а не для PUT (GET обрабатываются по-разному).
Буду признателен, если кто-нибудь подскажет, можно ли сообщить об этом как об ошибке, учитывая, что удаление перехватчика сделало его работоспособным.
Привет