У меня JAX-RS 2.8.9 с приложением Spring 4.3.4.Я выполняю очень простой запрос POST к следующему коду сервера
@POST
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response test(MultivaluedMap<String, String> work) {
return Response.ok(work.keySet().size()).build();
}
Я тестирую с помощью curl:
curl -i -X POST 'http://localhost:XXX/some/test' -d "param=value¶m2=value2" -H "Content-Type: application/x-www-form-urlencoded"
Я получаю следующее предупреждение
Aзапрос сервлета к URI http://localhost:XXX/some/test содержит параметры формы в теле запроса, но тело запроса было использовано сервлетом или фильтром сервлета, обращающихся к параметрам запроса.Только методы ресурсов, использующие @FormParam, будут работать как положено.Ресурсные методы, использующие тело запроса другими средствами, не будут работать должным образом.
О которых я обнаружил только причину, связанную с проблемами подключения, по-видимому, у меня нет.
Согласно документация это способ обработки случая, когда передается переменное число FormParams.
Это работает, хотя.
@POST
@Consumes({MediaType.APPLICATION_FORM_URLENCODED})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Response test(@FormParam("param") String param) {
return Response.ok(param).build();
}
В чем может быть причина, почему многозначная карта не делает?Это может быть какая-то фильтрация?Что является альтернативой для неизвестного числа параметров?
ОБНОВЛЕНИЕ Это связано с особенностью Джерси + Спринг.Решение можно найти в этом ответе.