如何访问HttpServletRequest中的POST参数?

我有一个应用程序,它基本上是服务的代理。该应用程序本身是在Jersey上构建的,由Jetty提供。我有这个资源方法:

    @POST

@Path("/{default: .*}")

@Timed

@Consumes("application/x-www-form-urlencoded")

public MyView post(@Context UriInfo uriInfo, @Context HttpServletRequest request) {

...

}

用户提交POST表单。所有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

此处的POST正文显然包含两个参数:foo和biz。但是,当我尝试在代码(request.getParameterMap)中获取它们时,结果是大小为0的映射。

如何从资源方法内部访问这些参数或此参数字符串?如果重要的话,将HttpServletRequest使用org.eclipse.jetty.server.Request的实现。

回答:

三种选择

  1. @FormParam("<param-name>")gt各个参数。例如

        @POST

@Consumes("application/x-www-form-urlencoded")

public Response post(@FormParam("foo") String foo

@FormParam("bar") String bar) {}

  1. 使用A MultivaluedMap获取所有参数

        @POST

@Consumes("application/x-www-form-urlencoded")

public Response post(MultivaluedMap<String, String> formParams) {

String foo = formParams.getFirst("foo");

}

  1. 使用Form让所有的PARAMS。

        @POST

@Consumes("application/x-www-form-urlencoded")

public Response post(Form form) {

MultivaluedMap<String, String> formParams = form.asMap();

String foo = formParams.getFirst("foo");

}

  1. @BeanParam一起使用@FormParam,可以获取Bean中所有的单个参数。

        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) {

}

以上是 如何访问HttpServletRequest中的POST参数? 的全部内容, 来源链接: utcz.com/qa/424538.html

回到顶部