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 ;
import ;
/**
* 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 = ();
// GET
if (("GET")) {
return new String(().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 = ();
if(contentLength<0){
return null;
}
byte buffer[] = new byte[contentLength];
for (int i = 0; i < contentLength;) {
int readlen = ().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 = ();
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 = ();
String text = "";
if (map != null) {
Set set = ();
Iterator iterator = ();
while (()) {
entry = (Entry) ();
if (() instanceof String[]) {
("==A==entry的key: " + ());
String key = (String) ();
if (key != null && !"id".equals(key) && ("[") && ("]")) {
text = (String) ();
break;
}
String[] values = (String[]) ();
for (int i = 0; i < ; i++) {
("==B==entry的value: " + values[i]);
key += "="+values[i];
}
if (("[") && ("]")) {
text = (String) ();
break;
}
} else if (() instanceof String) {
("==========entry的key: " + ());
("==========entry的value: " + ());
}
}
}
return text;
}
方式三:通过获取所有参数名的方式
这种方式也存在弊端 对json串中不能传特殊字符,比如/=, \=, /, ~等的这样的符号都不能有如果存在也不会读出来,他的模式和Map的方式是差不多的,也是转成Map处理的
/**
* 方法说明 :通过获取所有参数名的方式
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private String getParamNames(HttpServletRequest request) {
Map map = new HashMap();
Enumeration paramNames = ();
while (()) {
String paramName = (String) ();
String[] paramValues = (paramName);
if ( == 1) {
String paramValue = paramValues[0];
if (() != 0) {
(paramName, paramValue);
}
}
}
Set<<String, String>> set = ();
String text = "";
for ( entry : set) {
(() + ":" + ());
text += () + ":" + ();
("text------->"+text);
}
if(("[") && ("]")){
return text;
}
return "";
}
application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据 application/json;charset=utf-8 -> json数据
最后附上发送方式的连接
/mingtianhaiyouwo/article/details/51381853