如何在HttpServletRequest中访问POST参数? [英] How to access POST parameters in HttpServletRequest?

查看:367
本文介绍了如何在HttpServletRequest中访问POST参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've got an app that's basically a proxy to a service. The app itself is built on Jersey and served by Jetty. I have this Resource method:

@POST
@Path("/{default: .*}")
@Timed
@Consumes("application/x-www-form-urlencoded")
public MyView post(@Context UriInfo uriInfo, @Context HttpServletRequest request) {
  ...
}

用户提交POST表单。所有POST请求都通过此方法。除了一个细节之外,UriInfo和HttpServletRequest被适当地注入:似乎没有参数。以下是我从终端发送的请求:

A user submits a POST form. All POST requests go through this method. The UriInfo and HttpServletRequest are injected appropriately except for one detail: there seem to be no parameters. Here is my request being sent from the terminal:

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主体显然包含2个参数:foo和biz。但是当我尝试在我的代码( request.getParameterMap )中获取它们时,结果是一个大小为0的地图。

Here the POST body clearly contains 2 parameters: foo and biz. But when I try to get them in my code (request.getParameterMap) the result is a map of size 0.

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

How do I access these parameters or this parameter string from inside my resource method? If it matters, the implementation of HttpServletRequest that is used is org.eclipse.jetty.server.Request.

推荐答案

三个选项


  1. @FormParam(< param -name>) to gt individual params。例如

  1. @FormParam("<param-name>") to gt individual params. Ex.

@POST
@Consumes("application/x-www-form-urlencoded")
public Response post(@FormParam("foo") String foo
                     @FormParam("bar") String bar) {}


  • 使用多值地图获取所有参数

    @POST
    @Consumes("application/x-www-form-urlencoded")
    public Response post(MultivaluedMap<String, String> formParams) {
        String foo = formParams.getFirst("foo");
    }
    


  • 使用表格获取所有参数。

    @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来获取bean中的所有单个参数。

  • Use a @BeanParam along with individual @FormParams to get all the individual params inside a 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参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆