(转)获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8
落花踏尽游何处,笑入胡姬酒肆中。这篇文章主要讲述(转)获取 request 中用POST方式"
Content-type"
是"
application/x-www-form-urlencoded;
charset=utf-8相关的知识,希望能为你提供帮助。
request中发送json数据用post方式发送Content-type用application/json;
charset=utf-8方式发送的话,直接用springMVC的@RequestBody标签接收后面跟实体对象就行了,spring会帮你自动拼装成对象,如果Content-type设置成application/x-www-form-urlencoded;
charset=utf-8就不能用spring的东西了,只能以常规的方式获取json串了
方式一:通过流的方式
[java] view plain copy
print?
- import java.io.IOException;
- import javax.servlet.http.HttpServletRequest;
- /**
- * request 对象的相关操作
- * @author zhangtengda
- * @version 1.0
- * @created 2015年5月2日 下午8:25:43
- */
- public class GetRequestJsonUtils {
- /***
- * 获取 request 中 json 字符串的内容
- *
- * @param request
- * @return : < code> byte[]< /code>
- * @throws IOException
- */
- public static String getRequestJsonString(HttpServletRequest request)
- throws IOException {
- String submitMehtod = request.getMethod();
- // GET
- if (submitMehtod.equals("GET")) {
- return new String(request.getQueryString().getBytes("iso-8859-1"),"utf-8").replaceAll("%22", "\\"");
- // POST
- } else {
- return getRequestPostStr(request);
- }
- }
- /**
- * 描述:获取 post 请求的 byte[] 数组
- * < pre>
- * 举例:
- * < /pre>
- * @param request
- * @return
- * @throws IOException
- */
- public static byte[] getRequestPostBytes(HttpServletRequest request)
- throws IOException {
- int contentLength = request.getContentLength();
- if(contentLength< 0){
- return null;
- }
- byte buffer[] = new byte[contentLength];
- for (int i = 0; i < contentLength; ) {
- int readlen = request.getInputStream().read(buffer, i,
- contentLength - i);
- if (readlen == -1) {
- break;
- }
- i += readlen;
- }
- return buffer;
- }
- /**
- * 描述:获取 post 请求内容
- * < pre>
- * 举例:
- * < /pre>
- * @param request
- * @return
- * @throws IOException
- */
- public static String getRequestPostStr(HttpServletRequest request)
- throws IOException {
- byte buffer[] = getRequestPostBytes(request);
- String charEncoding = request.getCharacterEncoding();
- if (charEncoding == null) {
- charEncoding = "UTF-8";
- }
- return new String(buffer, charEncoding);
- }
- }
//在controll中进行调用 String content = HttpJsonUtils.getPostByApplicationForm(request); LOGGER.info("content*************" + content); JSONObject jsObject = JSONObject.fromObject(content); try { ipbegin = jsObject.getLong("ipbegin"); ipend = jsObject.getLong("ipend"); province = jsObject.getString("province"); isopen = jsObject.getString("isopen"); opertime = jsObject.getString("opertime"); sign = jsObject.getString("sign"); } catch (Exception e) { // TODO: handle exception e.getMessage(); LOGGER.info("发生错误*****" + e.getMessage()); } LOGGER.info("ipbegin********************************" + ipbegin); LOGGER.info("ipend********************************" + ipend); LOGGER.info("province********************************" + province); LOGGER.info("isopen********************************" + isopen); LOGGER.info("opertime********************************" + opertime); LOGGER.info("sign********************************" + sign);
方式二:通过获取Map的方式处理
这种刚方式存在弊端,如果json数据中存在=号,数据会在等号的地方断掉,后面的数据会被存储成map的values,需要重新拼装key和values的值,拼装成原来的json串
[java] view plain copy print?
- /**
- * 方法说明 :通过获取map的方式
- */
- @SuppressWarnings("rawtypes")
- private String getParameterMap(HttpServletRequest request) {
- Map map = request.getParameterMap();
- String text = "";
- if (map != null) {
- Set set = map.entrySet();
- Iterator iterator = set.iterator();
- while (iterator.hasNext()) {
- Map.Entry entry = (Entry) iterator.next();
- if (entry.getValue() instanceof String[]) {
- logger.info("==A==entry的key: " + entry.getKey());
- String key = (String) entry.getKey();
- if (key != null & & !"id".equals(key) & & key.startsWith("[") & & key.endsWith("]")) {
- text = (String) entry.getKey();
- break;
- }
- String[] values = (String[]) entry.getValue();
- for (int i = 0; i < values.length; i++) {
- logger.info("==B==entry的value: " + values[i]);
- key += "="+values[i];
- }
- if (key.startsWith("[") & & key.endsWith("]")) {
- text = (String) entry.getKey();
- break;
- }
- } else if (entry.getValue() instanceof String) {
- logger.info("==========entry的key: " + entry.getKey());
- logger.info("==========entry的value: " + entry.getValue());
- }
- }
- }
- return text;
- }
方式三:通过获取所有参数名的方式
这种方式也存在弊端 对json串中不能传特殊字符,比如/=, \\=, /, ~等的这样的符号都不能有如果存在也不会读出来,他的模式和Map的方式是差不多的,也是转成Map处理的
[java] view plain copy print?
- /**
- * 方法说明 :通过获取所有参数名的方式
- */
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private String getParamNames(HttpServletRequest request) {
- Map map = new HashMap();
- Enumeration paramNames = request.getParameterNames();
- while (paramNames.hasMoreElements()) {
- String paramName = (String) paramNames.nextElement();
- String[] paramValues = request.getParameterValues(paramName);
- if (paramValues.length == 1) {
- String paramValue = paramValues[0];
- if (paramValue.length() != 0) {
- map.put(paramName, paramValue);
- }
- }
- }
- Set< Map.Entry< String, String> > set = map.entrySet();
- String text = "";
- for (Map.Entry entry : set) {
- logger.info(entry.getKey() + ":" + entry.getValue());
- text += entry.getKey() + ":" + entry.getValue();
- logger.info("text-------> "+text);
- }
- if(text.startsWith("[") & & text.endsWith("]")){
- return text;
- }
- return "";
- }
附上一点常用的Content-type的方式
application/x-javascript text/xml-> xml数据 application/x-javascript-> json对象 application/x-www-form-urlencoded-> 表单数据 application/json; charset=utf-8 -> json数据
最后附上发送方式的连接
【(转)获取 request 中用POST方式" Content-type" 是" application/x-www-form-urlencoded; charset=utf-8】http://www.cnblogs.com/SimonHu1993/p/7295765.html
推荐阅读
- Codeforces461AAppleman and Toastman 贪心
- RF+Appium框架自动化测试系列一之(Mac下Appium环境搭建)万事开头难
- fiddler 抓取手机app请求包
- 《深入理解计算机系统》关于csapp.h和csapp.c的编译问题(转)
- Android 常见内存泄漏的解决方式
- Android SDK 更新和下载慢怎么办()
- [ZZ] matlab中小波变换函数dwt2和wavedec2 系数提取函数appcoef2和detcoef2
- android classloader双亲托付模式
- PWA(Progressive Web App)入门系列(PWA简单介绍)