当前位置: 首页 > 面试题库 >

如何访问HttpServletRequest中的POST参数?

杜凯
2023-03-14
问题内容

我有一个应用程序,它基本上是服务的代理。该应用程序本身是在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) {
    }


 类似资料:
  • 我有一个应用程序,基本上是一个服务的代理。该应用程序本身是基于Jersey构建的,由Jetty提供服务。我有这个资源方法: 用户提交POST表单。所有POST请求都通过此方法。UriInfo和HttpServletRequest被适当地注入,除了一个细节:似乎没有参数。这是我从终端发送的请求: 这里,POST正文显然包含两个参数:foo和biz。但当我尝试在代码中获取它们时(),结果是一个大小为0

  • 问题内容: 我的POST方法看起来像这样: 当我在Netbeans中创建Jersey客户时,调用post方法的方法如下所示: 运行此测试时: 它在服务器中提供以下输出: 我需要更改什么才能使参数给出正确的值? 问题答案: 你的方法应该接受JSON对象而不是字符串。Jersey使用JAXB支持封送和拆封JSON对象(有关详细信息,请参阅jersey文档)。创建一个类似的类: 然后,你的方法将如下所示

  • 问题内容: 如何获得与zf2中的页面请求相关的各种参数?像发布/获取参数一样,正在访问的路由,发送的标头和上传的文件。 问题答案: 最简单的方法是使用beta5中引入的Params插件。它具有实用方法,可轻松访问不同类型的参数。与往常一样,阅读测试对于了解应该如何使用某些东西非常有价值。 获得单一价值 要获取控制器中命名参数的值,您将需要为要查找的参数类型选择适当的方法并传递名称。 例子: 默认值

  • 问题内容: 我正在使用 javax.servlet.http.HttpServletRequest 来实现Web应用程序。 我可以使用 getParameter 方法获取请求的参数。但是我不知道如何在请求中设置参数。 问题答案: 您不能,不使用标准API。代表服务器收到的请求,因此添加新参数不是有效的选择(就API而言)。 原则上,您可以实现一个子类,该子类包装原始请求,并拦截方法,并在转发时传递

  • 问题内容: 您如何访问“工作流程” Jenkins作业的“此构建已参数化”部分中的设置? 测试用例 创建一个工作流作业。 启用“此构建已参数化”。 添加具有默认值的STRING PARAMETER 。 将以下代码添加到: 运行工作。 结果 问题答案: 我认为使用Workflow插件时,变量可以直接使用,而不是通过env。尝试:

  • 我知道如何获取如下查询的参数: 在这种情况下,我可以使用获取参数(例如中的)。 但是,对于类似的url,如何访问变量? 我尝试了,但没有成功。