(转)获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
来源:互联网 发布:阿里巴巴阿里云事业部 编辑:程序博客网 时间:2024/05/17 09:12
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);
- }
- }
//在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 exceptione.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串
- /**
- * 方法说明 :通过获取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 "";
- }
附上一点常用的Content-type的方式
application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据 application/json;charset=utf-8 -> json数据
最后附上发送方式的连接
http://www.cnblogs.com/SimonHu1993/p/7295765.html
阅读全文
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
- 当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到
- "CACHE-CONTROL" content="NO-CACHE"
- String s = "a" + "b" + "c" + "d" + "
- " " ' '
- script标签的type="test/html"时
- $("div").load(" http://www.baidu.com")
- 去掉 ecshop head 之间的Generator" content="ECSHOP v2.7.1"
- jeesite <meta name="decorator" content="default"/>
- $("#id").val()取值textarea是""
- struts2的method="{1}"
- spring 的scope="prototype"
- "抱怨"的人永远是"打工"的命
- 文件操作Excel解析(2)读取和写入Excel文件_根据积分获取奖品
- 关于JetBrains CLion 激活 (CLion License Activation)的解决办法,带hosts详细修改
- springmvc传参问题
- 《你只是看起来很努力》——阅读笔记
- 51nod 1451 合法三角形 判斜率去重,时间复杂度O(n^2)
- (转)获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- (转)java代码发送JSON格式的httpPOST请求
- 58. Length of Last Word —— Java
- 转载自 http://blog.csdn.net/bieleyang/article/details/76973220
- request中获取post的json对象数据content-type=“text/plain”
- 51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释
- 将JavaApplication注册成windows服务
- 软工实践第一篇随笔-准备