zoukankan      html  css  js  c++  java
  • [java,2018-01-16] HttpClient发送、接收 json 请求

    最近需要用到许多在后台发送http请求的功能,可能需要发送json和xml类型的数据。

    就抽取出来写了一个帮助类:

    首先判断发送的数据类型是json还是xml:

    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;

    import com.alibaba.fastjson.JSONException;
    import com.alibaba.fastjson.JSONObject;

     

    /** * 判断是否是json结构 */ public static boolean isJson(String value) { try { JSONObject.parseObject(value); } catch (JSONException e) { return false; } return true; } /** * 判断是否是xml结构 */ public static boolean isXML(String value) { try { DocumentHelper.parseText(value); } catch (DocumentException e) { return false; } return true; }

    判断之后就设置对应的属性,然后执行post方法:

    import org.apache.http.HttpResponse;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
       private static int connectionTimeout = 1000;// 连接超时时间,毫秒  
        private static int soTimeout = 30000;// 读取数据超时时间,毫秒  
        /** HttpClient对象 */  
        private static CloseableHttpClient httpclient = HttpClients.  
                custom().disableAutomaticRetries().build();  
        /*** 超时设置 ****/  
        private static RequestConfig requestConfig = RequestConfig.custom()  
                .setSocketTimeout(soTimeout)  
                .setConnectTimeout(connectionTimeout)  
                .build();//设置请求和传输超时时间  
    
      /** 
         * 根据给定的URL地址和参数字符串,以post方法调用,如果成功返回true,如果失败返回false 
         *  
         * @param url  String url地址,不含参数 
         * @param param   Map<String, Object> 参数字表单 
         * @return boolean true-成功,false失败,如果返回成功可以getStrGetResponseBody() 
         *         获取返回内容字符串,如果失败,则可访问getErrorInfo()获取错误提示。 
         */  
        public String executePostMethod(String strURL, String param) {  
            System.out.println("step into executePostMethod");
            String strResult = ""; 
            HttpPost post = new HttpPost(strURL);  
            post.setConfig(requestConfig);
            StringEntity entity;
            
            try { 
                System.out.println("step into try");
                
                if(isJson(param)){
                    System.out.println("it is json");
                    entity = new StringEntity(param,"utf-8");        // 解决中文乱码问题  
                    entity.setContentEncoding("UTF-8");      
                    entity.setContentType("application/json");      
                    post.setEntity(entity);  
                }else if(isXML(param)){
                    System.out.println("it is xml");
                    entity = new StringEntity(param,"utf-8");        // 解决中文乱码问题  
                    entity.setContentEncoding("UTF-8");      
                    entity.setContentType("text/xml");
                    post.setEntity(entity); 
                }else{
                    entity = new StringEntity(param,"utf-8");        // 解决中文乱码问题  
                    entity.setContentEncoding("UTF-8");      
                    entity.setContentType("application/x-www-form-urlencoded");
                    post.setEntity(entity); 
                }
                
                //发起请求  
                HttpResponse httpResponse = httpclient.execute(post);     
                // 请求结束,返回结果    
                strResult = EntityUtils.toString(httpResponse.getEntity());   
                System.out.println(strResult);
            } catch (Exception e) {  
                e.printStackTrace();  
            }
            return strResult;  
        }

    另附上map转为xml和json的方法:

    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.Map.Entry;

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;

    import com.alibaba.fastjson.JSONObject;

       /** 
         * 将map转换为xml 
         * @param map 
         */  
        private static String convertMap2Xml(Map<String,String> map) {  
            Set<Entry<String,String>> entrys = map.entrySet();  
            Iterator<Entry<String,String>> iter = entrys.iterator();  
            Document doc = DocumentHelper.createDocument();  
            Element root = DocumentHelper.createElement("xml");  
            while(iter.hasNext()) {  
                Entry<String,String> entry = iter.next();  
                Element key = DocumentHelper.createElement(entry.getKey());  
                key.addCDATA(entry.getValue());  
                root.add(key);  
            }  
            doc.add(root);  
            return doc.asXML();  
        }
    
      /** 
         * 将map转换为json 
         * @param map 
         */  
        private static String convertMap2Json(Map<String,String> map) {  
            JSONObject json = JSONObject.parseObject(map.toString());    
                    return json.toString(); 
        }    

     http接受json格式的数据

    public String getJsonData(HttpServletRequest request) {
        System.out.println(request.getCharacterEncoding());
        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"utf-8"));
        String line = null;
        StringBuilder sb = new StringBuilder();
        while((line = br.readLine())!=null){
             sb.append(line);
        }
        return sb.toString();
    }
    
          
     
  • 相关阅读:
    浅谈T-SQL中的特殊联结
    浅谈T-SQL中的联接查询
    对AccessViolationException的一些总结
    浅谈JavaScript中的定时器
    浅谈跨域
    浅谈JavaScript中的Ajax
    浅谈JavaScript中的能力检测
    c# webConfig中的session超时详细设置
    c# session总结
    重启sql server服务两种方式
  • 原文地址:https://www.cnblogs.com/shijt/p/8295621.html
Copyright © 2011-2022 走看看