精华内容
下载资源
问答
  • 主要介绍了java 获取request中的请求参数的方法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
  • 自定义request,修改post请求参数

    千次阅读 2020-06-10 14:48:11
    场景:有时候需要在拦截器层对请求参数进行处理,get请求容易,不谈,现在说下post请求 注意:如果是用json的方式传递,获取数据时是获取的body流,request的body流只能读取一次 步骤: 1.自定义request类 @...

    场景:有时候需要在拦截器层对请求参数进行处理,get请求容易,不谈,现在说下post请求

    注意:如果是用json的方式传递,获取数据时是获取的body流,request的body流只能读取一次

     

    步骤:

    1.自定义request类

    @Slf4j
    public class BodyHttpServletRequestWrapper extends HttpServletRequestWrapper {
    
    
        //存储请求参数--application/x-www-form-urlencoded、form-data方式
        private final List<DataElement> dataList = new ArrayList<>();
    
        public BodyHttpServletRequestWrapper(HttpServletRequest request) {
            super(request);
    
    
            /*
             当需要处理json格式时,在这里通过流获取dataInfo,如果是表单提交,这里通过        
             request.getParameterMap()获取参数并缓存下来,自己举一反三!!
             */
            //req2RawString(request);
            String dataInfo = request.getParameter("data");
            if (StringUtils.isEmpty(dataInfo)){
                return;
            }
    
    
    
            JSONObject jsonObject = JSONObject.parseObject(dataInfo);
            Set<String> keySet = jsonObject.keySet();
            for (String key : keySet) {
                DataElement param = new DataElement();
                param.setKey(key);
                param.setDataInfo(jsonObject.getString(key));
                dataList.add(param);
            }
        }
    
        @Override
        public Enumeration<String> getParameterNames() {
            Set<String> keySet = new HashSet<>();
            dataList.forEach(dataElement -> {
                keySet.add(dataElement.getKey());
            });
            return Collections.enumeration(keySet);
        }
    
        @Override
        @Nullable
        public String[] getParameterValues(String key) {
            String[] parameterValues = new String[1];
            AtomicBoolean haveData = new AtomicBoolean(false);
            dataList.forEach(dataElement -> {
                if (dataElement.getKey().equals(key)) {
                    parameterValues[0] = dataElement.getDataInfo();
                    haveData.set(true);
                }
            });
            if (haveData.get()) {
                return parameterValues;
            } else {
                return null;
            }
        }
    
    /*  public static String req2RawString(HttpServletRequest request) {
            StringBuilder sb = new StringBuilder();
            BufferedReader reader = null;
            try {
                reader = request.getReader();
                String line;
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append('\n');
                }
                if (sb.length() > 1) {
                    sb.replace(sb.length() - 1, sb.length(), "");
                }
            } catch (IOException e) {
                log.info("RequestUtil,IOException:" + e);
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        log.info("RequestUtil,IOException:" + e);
                    }
                }
            }
            String str = sb.toString();
            log.info("Request Result:" + str);
            return str;
    
        }*/
    
    
    /**
    用来存储参数的对象---你可以自定义
    **/
        @Data
        private class DataElement implements Serializable {
    
            private String key;
    
            private String dataInfo;
        }
    }

    在控制层进行参数映射时,会调用我们重写的getParameterNames获取所有的key,再通过key调用getParameterValues方法获取对应的值;

    2.定义拦截器类,在满足条件的情况下,使用我们自定义的request对象

    @Component
    @Slf4j
    public class HttpServletRequestReplacedFilter extends OncePerRequestFilter {
    
        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    
            //满足条件就使用自定义request对象,否则使用方法参数里的
            String methodType = request.getMethod().toUpperCase();
            if ((("POST".equals(methodType)) || ("DELETE".equals(methodType)) || ("PUT".equals(methodType))) && isBaoWuTransmit(request)) {
                ServletRequest requestWrapper = new BodyHttpServletRequestWrapper(request);
                filterChain.doFilter(requestWrapper, response);
            } else{
                filterChain.doFilter(request, response);
            }
        }
    
        private boolean isBaoWuTransmit(HttpServletRequest request) {
            boolean baoWu = false;
            Enumeration e = request.getHeaderNames();
            while (e.hasMoreElements()) {
                String headerName = (String) e.nextElement();
                if ("appcode".equals(headerName)){
                    baoWu = true;
                }
            }
            return baoWu;
        }
    

    完毕!!!

    展开全文
  • Tornado请求分析request, 获取请求参数

    万次阅读 2019-01-06 22:37:30
    请求分析request WEB请求的那些事 这节中,我们来根据客户请求报文中的请求行(Request line) ,请求头部(Request Header),请求主体(Request body)的信息,来描述服务端如何处理。 请求行的格式:&amp;lt;...
       
    

    全栈工程师开发手册 (作者:栾鹏)
    架构系列文章

    请求分析request

    WEB请求的那些事

    这节中,我们来根据客户请求报文中的请求行(Request line) ,请求头部(Request Header),请求主体(Request body)的信息,来描述服务端如何处理。
    请求行的格式:<method> <request-URL> <version>

    tornado.web库

    再次重申:tornado 用 web.RequestHandler 类,来处理客户请求。每一次客户发来请求,先由服务器应用APP根据路由映射,调用处理类,生成一个RequestHandler类对象。这个类对象负责处理 客户请求的请求信息,并根据类的处理方法,生成返回的响应报文。

    我们这里,根据客户的请求报文三个部分,来看看 客户的请求报文 提供的信息。

    展开全文
  • 我在网上查到好像需要params 和encSecKey这两个参数,请问是这样的吗
  • Request获取请求参数的通用方法

    千次阅读 2020-07-07 15:03:31
    从这里Request获取请求数据实例我们可以了解到,get请求和post请求获取请求参数有着不一样的方法,这对我们的封装很不方便,下面就介绍一种获取请求参数的通用方法 String getParameter(String name):根据参数...

    从这里Request获取请求数据实例我们可以了解到,get请求和post请求获取请求参数有着不一样的方法,这对我们的封装很不方便,下面就介绍一种获取请求参数的通用方法

    • String getParameter(String name):根据参数名称获取参数值
    • String[] getParameterValues(String name):根据参数名称获取参数值的数组
    • Enumeration<String> getParameterNames():获取所有请求的参数名称
    • Map<String,String[]> getParameterMap():获取所有参数的map集合

    写一个例子,因为方法是通用的,所以不管是get请求,还是post请求,都是一样的,所以为了测试,我们在get请求里调用post请求的方法

    package com.lingaolu.request;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.*;
    import java.io.IOException;
    import java.util.Enumeration;
    import java.util.Map;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    /**
     * @author 林高禄
     * @create 2020-07-07-12:06
     */
    @WebServlet("/requestDemo3")
    public class RequestDemo3 extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("post请求------------------------------------------------------------");
            String name = request.getParameter("name");
            System.out.println("名字为:"+name);
            System.out.println("爱好为:");
            String[] loves = request.getParameterValues("love");
            Stream.of(loves).forEach(System.out::println);
            System.out.println("所有的请求参数名称为:");
            Enumeration<String> parameterNames = request.getParameterNames();
            while (parameterNames.hasMoreElements()){
                String s = parameterNames.nextElement();
                System.out.println(s);
            }
            System.out.println("所有的请求参数为:");
            Map<String, String[]> parameterMap = request.getParameterMap();
            parameterMap.forEach(
                    (key,value)->System.out.println(key+": "+Stream.of(value).collect(Collectors.joining(",", "", "")))
            );
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("get请求---------------------------------------------------------");
            String name = request.getParameter("name");
            System.out.println("名字为:"+name);
            System.out.println("爱好为:");
            String[] loves = request.getParameterValues("love");
            Stream.of(loves).forEach(System.out::println);
            System.out.println("所有的请求参数名称为:");
            Enumeration<String> parameterNames = request.getParameterNames();
            while (parameterNames.hasMoreElements()){
                String s = parameterNames.nextElement();
                System.out.println(s);
            }
            System.out.println("所有的请求参数为:");
            Map<String, String[]> parameterMap = request.getParameterMap();
            parameterMap.forEach(
                    (key,value)->System.out.println(key+": "+Stream.of(value).collect(Collectors.joining(",", "", "")))
            );
            this.doPost(request,response);
        }
    }
    

    Postman请求,get请求,参数为2个nam,一个age,两个love

    后台输出

    get请求---------------------------------------------------------
    名字为:lin
    爱好为:
    aa
    bb
    所有的请求参数名称为:
    name
    age
    love
    所有的请求参数为:
    name: lin,cc
    age: 27
    love: aa,bb
    post请求------------------------------------------------------------
    名字为:lin
    爱好为:
    aa
    bb
    所有的请求参数名称为:
    name
    age
    love
    所有的请求参数为:
    name: lin,cc
    age: 27
    love: aa,bb

    虽然有2个name,但是getParameter获取到的是第一个name

    展开全文
  • java从request获取GET和POST请求参数

    千次阅读 2020-11-17 14:52:44
    一 、获取请求方式 request.getMethod(); get和post都可用, 二 、获取请求类型 request.getContentType(); get和post都可用,示例值:application/json ,multipart/form-data, application/xml等 三 、获取所有...

    URL和参数列表
    一 、获取请求方式
    request.getMethod(); get和post都可用,

    二 、获取请求类型
    request.getContentType(); get和post都可用,示例值:application/json ,multipart/form-data, application/xml等

    三 、获取所有参数key
    request.getParameterNames(); get和post都可用,注:不适用contentType为multipart/form-data

    四 、获取参数值value
    request.getParameter(“test”); get和post都可用,注:不适用contentType为multipart/form-data

    五、 获取取参数请求集合
    request.getParameterMap(); get和post都可用,注: 不适用contentType为multipart/form-data

    六 、获取文本流
    request.getInputStream() 适用于如:application/json,xml,multipart/form-data文本流或者大文件形式提交的请求或者xml等形式的报文

    七 、获取URL
    getRequestURL()

    八 、获取参数列表:
    1.getQueryString()
    只适用于GET,比如客户端发送http://localhost/testServlet?a=b&c=d&e=f,通过request.getQueryString()得到的是a=b&c=d&e=f.

    2.getParameter()
    GET和POST都可以使用

    但如果是POST请求要根据

    表单提交数据的编码方式来确定能否使用.当编码方式是(application/x- www-form-urlencoded)时才能使用.

    这种编码方式(application/x-www-form-urlencoded)虽然简单,但对于传输大块的二进制数据显得力不从心.

    对于传输大块的二进制数这类数据,浏览器采用了另一种编码方式(“multipart/form-data”),这时就需要使用下面的两种方法.

    3.getInputStream()
    4.getReader()
    上面两种方法获取的是Http请求包的包体,因为GET方式请求一般不包含包体.所以上面两种方法一般用于POST请求获取参数.

    需要注意的是:

    request.getParameter()、 request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。

    比如:

    当form表单内容采用 enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter()方法得到参数后,

    再调用request.getInputStream()或request.getReader()已经得不到流中的内容,

    因为在调用 request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。

    当form表单内容采用 enctype=multipart/form-data编码时,即使先调用request.getParameter()也得不到数据,

    所以这时调用request.getParameter()方法对 request.getInputStream()或request.getReader()没有冲突,

    即使已经调用了 request.getParameter()方法也可以通过调用request.getInputStream()或request.getReader()得到表单中的数据,

    而request.getInputStream()和request.getReader()在同一个响应中是不能混合使用的,如果混合使用就会抛异常

    展开全文
  • 在工作中我们有时会遇到需要在request获取请求参数的场景。比如说用来记录追踪日志,排查问题等。 一、当HTTP请求方式为get或delete时,有以下几种方式: 1.获取url中所有参数 request.getQueryString(); 2...
  • spring boot拦截器中获取request post请求中的参数 很强,赞一个
  • Request获取请求参数

    千次阅读 2019-06-29 17:22:08
    获取请求参数:请求参数是由客户端发送给服务器的,有可能是在请求体(POST),也有可能在URL之后(GET) 》String getParameter(String name):获取指定名称的请求参数,适用于单值请求参数 》String[] getParameterValue...
  • 主要介绍了springboot中不能获取post请求参数的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 后台springMVC用request.getParameter()获取请求参数的话,在postman发送请求时,body选取x-www-form-urlencoded,Headers部分是key: Content-Type...当然,也可以使用其他方式获取请求参数如@RequestBody 实体类 实...
  • 主要介绍了Servlet获取AJAX POST请求参数以form data和request payload形式传输的方法,结合实例形式详细分析了post数据发送及获取请求数据的原理与相关操作注意事项,需要的朋友可以参考下
  • request获取请求参数

    千次阅读 2018-10-15 17:43:19
    * 演示request获取请求参数 */ public class DServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ...
  • 在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json。 data与json既可以是str类型,也可以是dict类型。 区别: 1、不管json是str还是dict,如果不指定headers中的content...
  • 测试2(把获取请求参数和请求体的代码交换位置) 测试3(将获取请求体注释) 测试4(注释获取请求行) 测试结果:request.getParameter(str) 和 request.Reader().readLine()不知道怎么有冲突(⊙_⊙)? 还请知道的...
  • // 获取@RequestBody注解参数和post请求参数 String body = requestWrapper.getBody(); System.out.println("拦截器输出body:" + body); System.out.println("uri=" + request.getRequestURI()); //...
  • 9.Django_获取request参数_post请求

    千次阅读 2019-11-21 22:40:06
    post请求, 发送form表单 发送post请求403,然后响应内容是: 解决方法: 1.到settings.py注释下面这行(不推荐)之前推荐过 2.解决cookie没有csrf_token的...用request.POST来获取form表单的内容, 也可以使用...
  • servlet的请求参数作为客户端请求的一部分都是以字符串形式传给servlet容器。 参数以键值对方式存储,而且一个参数名可以对应多个参数值。ServletRequest接口的以下4个方法用于访问这些参数信息: get...
  • request获取所有请求参数

    千次阅读 2017-09-07 16:48:27
    request获取请求参数有两种情况 1.从 get 方法中获取请求参数 get 方法的请求参数存放在 getQueryString() 方法中,不需要从 getInputStream() 中获取 2.从 post 方法中获取请求参数 post 方法的参数存...
  • java 获取request中的请求参数

    千次阅读 2019-05-24 14:48:41
    1、get 和 post请求方式 (1)request.getParameterNames(); 获取所有参数key后。遍历request.getParameter(key)获取value (2)request.getParameterMap() 。直接包含参数key和value值,简单方便 Map<...
  • Request获取请求参数通用方式

    千次阅读 2019-08-17 09:40:06
    Request获取请求参数通用方式指的是不论get还是post请求方式都可以使用下列方式来获取请求参数,这样的方法一共有四种,下面来为大家一一介绍。 1.String getParameter(String name):根据参数名称获取参数值 为了...
  • 下面小编就为大家带来一篇request请求获取参数的实现方法(post和get两种方式)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • SpringBoot - 获取 POST 请求参数详解

    千次阅读 2020-12-27 15:39:59
    上一篇文章介绍了Controller如何接收通过GET方式传递过来的参数,这篇文章介绍一下何接收通过POST方式传递过来的参数。 本篇文章为了方便 使用 Postman进行 POST 请求 的测试 一、接收 Form 表单数据 1、基本的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 264,050
精华内容 105,620
关键字:

request获取post请求参数