获取 request 中用POST方式"Content-type"是"applicationx-www-form-urlencoded;charset=utf-8"发送的 json 数

    xiaoxiao2021-04-12  39

    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串了

    方式一:通过流的方方式

    [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(""""\"");           // 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串

    [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数据 最后附上发送方式的连接

    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();       }      }  

    转载请注明原文地址: https://ju.6miu.com/read-667924.html

    最新回复(0)