如何访问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的实现。
回答:
三种选择
@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
让所有的PARAMS。
@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
,可以获取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