equest中发送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);
- }
- }
这种刚方式存在弊端,如果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
java代码发送JSON格式的httpPOST请求
- import Java.io.BufferedReader;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import net.sf.json.JSONObject;
-
- public class AppAddTest {
-
- public static final String ADD_URL = "www.2cto.com";
-
- public static void appadd() {
-
- try {
- //创建连接
- URL url = new URL(ADD_URL);
- HttpURLConnection connection = (HttpURLConnection) url
- .openConnection();
- connection.setDoOutput(true);
- connection.setDoInput(true);
- connection.setRequestMethod("POST");
- connection.setUseCaches(false);
- connection.setInstanceFollowRedirects(true);
- //application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据 application/json;charset=utf-8 -> json数据
- connection.setRequestProperty("Content-Type",
- "application/x-www-form-urlencoded");
- connection.setRequestProperty("accept", "*/*");
- connection.setRequestProperty("user-agent",
- "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
-
- connection.connect();
-
- //POST请求
- DataOutputStream out = new DataOutputStream(
- connection.getOutputStream());
- JSONObject obj = new JSONObject();
- obj.element("app_name", "asdf");
- obj.element("app_ip", "10.21.243.234");
- obj.element("app_port", 8080);
- obj.element("app_type", "001");
- obj.element("app_area", "asd");
-
- out.writeBytes(obj.toString());
- out.flush();
- out.close();
-
- //读取响应
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- connection.getInputStream()));
- String lines;
- StringBuffer sb = new StringBuffer("");
- while ((lines = reader.readLine()) != null) {
- lines = new String(lines.getBytes(), "utf-8");
- sb.append(lines);
- }
- System.out.println(sb);
- reader.close();
- // 断开连接
- connection.disconnect();
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
-
- public static void main(String[] args) {
- appadd();
- }
-
- }
- import Java.io.BufferedReader;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.net.HttpURLConnection;
- import java.net.MalformedURLException;
- import java.net.URL;
- import net.sf.json.JSONObject;
- public class AppAddTest {
- public static final String ADD_URL = "www.2cto.com";
- public static void appadd() {
- try {
- //创建连接
- URL url = new URL(ADD_URL);
- HttpURLConnection connection = (HttpURLConnection) url
- .openConnection();
- connection.setDoOutput(true);
- connection.setDoInput(true);
- connection.setRequestMethod("POST");
- connection.setUseCaches(false);
- connection.setInstanceFollowRedirects(true);
- //application/x-javascript text/xml->xml数据 application/x-javascript->json对象 application/x-www-form-urlencoded->表单数据 application/json;charset=utf-8 -> json数据
- connection.setRequestProperty("Content-Type",
- "application/x-www-form-urlencoded");
- connection.setRequestProperty("accept", "*/*");
- connection.setRequestProperty("user-agent",
- "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
- connection.connect();
- //POST请求
- DataOutputStream out = new DataOutputStream(
- connection.getOutputStream());
- JSONObject obj = new JSONObject();
- obj.element("app_name", "asdf");
- obj.element("app_ip", "10.21.243.234");
- obj.element("app_port", 8080);
- obj.element("app_type", "001");
- obj.element("app_area", "asd");
- out.writeBytes(obj.toString());
- out.flush();
- out.close();
- //读取响应
- BufferedReader reader = new BufferedReader(new InputStreamReader(
- connection.getInputStream()));
- String lines;
- StringBuffer sb = new StringBuffer("");
- while ((lines = reader.readLine()) != null) {
- lines = new String(lines.getBytes(), "utf-8");
- sb.append(lines);
- }
- System.out.println(sb);
- reader.close();
- // 断开连接
- connection.disconnect();
- } catch (MalformedURLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- appadd();
- }
- }