获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
来源:互联网 发布:淘宝买家不退货 编辑:程序博客网 时间:2024/05/17 21:52
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串了
方式一:通过流的方方式
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); }}方式二:通过获取Map的方式处理
这种刚方式存在弊端,如果json数据中存在=号,数据会在等号的地方断掉,后面的数据会被存储成map的values,需要重新拼装key和values的值,拼装成原来的json串
/** * 方法说明 :通过获取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处理的
/** * 方法说明 :通过获取所有参数名的方式 */ @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 ""; }
application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据 application/json;charset=utf-8 -> json数据
最后附上发送方式的连接
http://blog.csdn.net/mingtianhaiyouwo/article/details/51381853
0 0
- 获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
- 获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
- (转)获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
- 获取 request 中用POST方式"Content-type"是"application/json"发送的 json 数据
- Content-Type:application/x-www-form-urlencoded; charset=UTF-8 设置方法 针对AFN或者是原生
- Okhttp3问题 Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
- 未指定Content-Type: application/x-www-form-urlencoded将会导致服务端获取Ajax POST数据失败
- Content-Type: application/x-www-form-urlencoded
- 解决Content-Type :application/x-www-form-urlencoded 老是request.getInputStream()取不到值的问题
- [转]Content-Type: application/x-www-form-urlencoded
- Content-Type: application/x-www-form-urlencoded什么意思
- 关于 Content-Type:application/x-www-form-urlencoded
- Content-Type的application/x-www-form-urlencoded和multipart/related
- 关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related
- 关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related
- 关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related
- 关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related
- 关于 Content-Type:application/x-www-form-urlencoded 和 Content-Type:multipart/related
- web端文件上传功能的思考
- USB协议架构及驱动架构
- GitHub 排名前 100 的安卓、iOS项目简介
- A Fully Featured Windows HTTP Wrapper in C++
- MultipeerConnectivity.framework梳理
- 获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
- 2016-5-20-1
- MySQL 同步表
- Python FTP实现
- java的内存回收机制GC
- 万能启动的最后的传说:UD三分区法部署教程!UD加UEFI!
- 手把手教你写框架之ShykyAnnotations - 原理篇
- Java多线程之wait(),notify(),notifyAll()
- Mycat分布式事务的实现