NullMoneyException
java.life.NullMoneyException
posts - 47,comments - 6,views - 32459

最近需要用到许多在后台发送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();
}

      
复制代码

 

 

 

 

 

 

 
posted on   NullMoneyException  阅读(1741)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
· 从 Windows Forms 到微服务的经验教训
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示