Как получить доступ к параметрам POST в HttpServletRequest?
У меня есть приложение, которое в основном является прокси-сервером для службы. Само приложение построено на Джерси и обслуживается Jetty. У меня есть этот метод ресурсов:
@POST
@Path("/{default: .*}")
@Timed
@Consumes("application/x-www-form-urlencoded")
public MyView post(@Context UriInfo uriInfo, @Context HttpServletRequest request) {
...
}
Пользователь отправляет форму POST. Все почтовые запросы проходят через этот метод. UriInfo и HttpServletRequest вводятся соответствующим образом, за исключением одной детали: кажется, нет никаких параметров. Вот мой запрос, отправленный с терминала:
POST /some/endpoint HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 15
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: localhost:8010
User-Agent: HTTPie/0.9.2
foo=bar&biz=baz
Здесь тело сообщения явно содержит 2 параметра: foo и biz. Но когда я пытаюсь чтобы получить их в моем коде (request.getParameterMap
), результатом является карта размера 0.
Как получить доступ к этим параметрам или этой строке параметров из моего метода ресурсов? Если это имеет значение, то реализация HttpServletRequest
, которая используется, является org.затмение.пристань.сервер.Запрос.
1 ответ:
Три варианта
@FormParam("<param-name>")
к отдельным парам gt. Экс.@POST @Consumes("application/x-www-form-urlencoded") public Response post(@FormParam("foo") String foo @FormParam("bar") String bar) {}
Используйте a
MultivaluedMap
, чтобы получить все параметры@POST @Consumes("application/x-www-form-urlencoded") public Response post(MultivaluedMap<String, String> formParams) { String foo = formParams.getFirst("foo"); }
Используйте
Form
, чтобы получить все параметры.@POST @Consumes("application/x-www-form-urlencoded") public Response post(Form form) { MultivaluedMap<String, String> formParams = form.asMap(); String foo = formParams.getFirst("foo"); }
Используйте
@BeanParam
вместе с отдельными@FormParam
s, чтобы получить все отдельные парамы внутри боба.public class FormBean { @FormParam("foo") private String foo; @FormParam("bar") private String bar; // getters and setters } @POST @Consumes("application/x-www-form-urlencoded") public Response post(@BeanParam FormBean form) { }