`

通过流的方式获取Request中的参数

阅读更多
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.beanutils.BeanUtils;

/**
 * requst流对象工具类
 * @author LUSHUIFA242
 *
 */
public class RequestStreamUtil {
	
	/**
	 * 将request流中的数据转换成String
	 * @param request
	 * @return
	 */
      public static String toString(HttpServletRequest request){
		    String valueStr = "";
		    try {
				StringBuffer sb = new StringBuffer();
				InputStream is = request.getInputStream();
				InputStreamReader isr = new InputStreamReader(is);
				BufferedReader br = new BufferedReader(isr);
				String s = "";
				while ((s = br.readLine()) != null) {
					sb.append(s);
				}
				valueStr = sb.toString();
			} catch (IOException e) {
				e.printStackTrace();
				valueStr = "";
			}
			return valueStr;
      }
      
	   /**
	  	 * 将request流中的数据转换成Map
	  	 * @param request
	  	 * @return
	  	 */
	    public static Map<String,String> toMap(HttpServletRequest request){
	    	Map<String,String> parameter = new HashMap<String,String>();
	    	String valueStr = toString(request);
	    	try {
	    		if(null!=valueStr&&!"".equals(valueStr)){
			    	String[] valueArr = valueStr.split("&");
			    	for (String kvStr : valueArr) {
			    		String[] kvStrArr = kvStr.split("=");
			    		parameter.put(kvStrArr[0], kvStrArr[1]);
					}
			    }else{
			    	parameter = getParameterMap(request);
			    }
			} catch (Exception e) {
				e.printStackTrace();
			}
			return parameter;
	    }
	    
	    /**
	  	 * 将request流中的数据转换成bean
	  	 * @param request
	  	 * @return
	  	 */
	    public static Object toBean(HttpServletRequest request,Class<?> beanClazz){
	    	Map<String, String> mapObject = toMap(request);
	    	System.out.println("toBean:"+mapObject);
	    	Object beanO = null;
	    	try {
	    		beanO = beanClazz.newInstance();
	    		if(null!=mapObject&&!mapObject.isEmpty()){
	    			BeanUtils.copyProperties(beanO,mapObject);
	    		}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return beanO;
	    }
	    
	    /** 
		 * 从request中获得参数Map,并返回可读的Map 
		 * @param request 
		 * @return 
		 */
		public static Map<String,String> getParameterMap(HttpServletRequest request) {  
		    // 参数Map  
		    Map properties = request.getParameterMap();  
		    // 返回值Map  
		    Map<String,String> returnMap = new HashMap<String,String>();  
		    Iterator entries = properties.entrySet().iterator();  
		    Map.Entry<String,String> entry;  
		    String name = "";  
		    String value = "";  
		    while (entries.hasNext()) {  
		        entry = (Map.Entry) entries.next();  
		        name = (String) entry.getKey();  
		        Object valueObj = entry.getValue();  
		        if(null == valueObj){  
		            value = "";  
		        }else if(valueObj instanceof String[]){  
		            String[] values = (String[])valueObj;  
		            for(int i=0;i<values.length;i++){  
		                value = values[i] + ",";  
		            }  
		            value = value.substring(0, value.length()-1);  
		        }else{  
		            value = valueObj.toString();  
		        }  
		        returnMap.put(name, value);  
		    }
		    return returnMap;  
		}
}

其它同学有更好的设计可以随意评论,谢谢!

 

0
1
分享到:
评论

相关推荐

    WinForm窗体程序中使用CefSharp获取加载后的资源、截取request参数、拦截response数据、注入jquery文件和js代码。

    环境:vs2019、.net 4.6。 WinForm窗体程序中使用CefSharp获取加载后的资源、截取request参数、拦截response数据、注入jquery文件和js代码。有问题可联系q369628105

    .net core在服务器端获取api传递的参数过程

    这篇文章主要介绍了.net core在服务器端获取api传递的参数过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在 ActionFilterAttribute 的...

    流媒体音视频技术:grpc协议实现流媒体传输,proto消息体中的流类型嵌套

    stream流类型在grpc的实际项目中是出现频率很高的数据类型,一般是位于交互参数或者返回值的位置: rpc Get_Stream(request) returns(stream response){}//获取数据流 rpc Put_Stream(stream request) returns...

    spring mvc 拦截器获取请求数据信息.rar

    spring mvc 拦截器获取请求数据信息 解压之后放到项目中 直接运行就可以了 (将流多次运用)

    java通过HttpServletRequest获取post请求中的body内容的方法

    本篇文章主要介绍了java通过HttpServletRequest获取post请求中的body内容的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    C#-HTTP请求接收(Post数据流,GET,表单)

    C#-HTTP请求接收(Post数据流,GET,表单)

    asp.net 从POST的数据流中提取参数和文件

    按理,Form提交的数据,无论是application/x-www-form-urlencoded还是multipart/form-data(有附件时),都可在服务端通过Request.Form["name"]和Request.Files["name"]获取到参数和上传的文件。

    web程序开发中的URL乱码解决方案

    在服务器端/后台/后台程序中设置请求流和响应流的编码方式和页面上的编码方式一致:request().setCharacterEncoding("utf-8");response().setCharacterEncoding("ut f-8");response().setContentType("text/html;...

    jsp九大内置对象

     该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以  获取用户提交的信息。  当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。首先,将...

    JAVA程序员面试题

    getInputStream():返回请求的输入流,用于获得请求中的数据 getMethod():获得客户端向服务器端传送数据的方法 getParameter(String name):获得客户端传送给服务器端的有name指定的参数值 getParameterNames():...

    MiniExercise.rar

    (3)通过输入流获取请求协议 (注意:GET与POST不一致的地方) 2. 返回响应协议 (1)准备内容 (2)获取字节数的长度 (3)拼接响应协议 (注意: 空格与换行) (4)使用输出流输出 3. 封装响应信息Response (1...

    html笔记.txt

    通过该对象可以获得请求中的头信息、Cookie和请求参数。 Response(Javax.servlet.ServletResponse)作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,...

    JSP 9 大内置对象详解.txt

    通过该对象可以获得请求中的头信息、Cookie和请求参数。 Response(Javax.servlet.ServletResponse)作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,...

    Java EE常用框架.xmind

    如果查询不到,realm返回null,FormAuthenticationFilter向request域中填充一个参数(记录了异常信息) 退出 不用我们去实现退出,只要去访问一个退出的url(该 url是可以不存在),由LogoutFilter...

    ssh(structs,spring,hibernate)框架中的上传下载

     我们前面已经指出Oracle的Lob字段和一般类型的字段在操作上有一个明显的区别--那就是你必须首先通过Oracle的empty_blob()/empty_clob()初始化Lob字段,然后获取该字段的引用,通过这个引用更改其值。所以要完成对...

    HttpClient以及获取页面内容应用

    12. Request的输出流可以避免流中内容直接缓冲到socket服务器。 13. Response的输入流可以有效的从socket服务器直接读取相应内容。 14. 在http1.0和http1.1中利用KeepAlive保持持久连接。 15. 直接获取服务器发送的...

    新闻发布系统

    // 获取out对象(响应输出字符流) ServletContext application = super.getServletContext(); // 获取application对象(Servlet上下文对象) String contextPath = request.getContextPath(); // 获取上下文路径...

    c# 流断点上传

    /// 保存文件(从URL参数中获取文件名、当前指针,将文件流保存到当前指针后) /// 如果是第一次上传,则当前指针为0,代码执行与续传一样,只不过指针没有偏移 /// /// 文件名 /// 当前指针偏移 /// ...

    JAVA_API1.6文档(中文)

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    java 面试题 总结

    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 20、EJB与JAVA BEAN的区别? Java Bean 是可复用...

Global site tag (gtag.js) - Google Analytics