java 发送get/Post 请求,获取返回javabean

本文提供了一个实用的工具类用于JSON与JavaBean之间的转换,并实现了发送HTTP GET和POST请求的功能。同时介绍了如何处理请求参数和响应结果。

好记性不如烂笔头,开发过程中经常遇到一些问题,把近期用到的一些东西做记录,往后有需要的时候方便查找

json 转javabean工具类 (这里用的是Gson 包)

public class JsonUtil {

   private static Gson gson = new Gson();
   
   private JsonUtil() {
   }

   public static String toJson(Object o) {
      return gson.toJson(o);
   }
   
   public static <T> T fromJson(String jsonStr, Class<T> t) {
      return gson.fromJson(jsonStr, t);
   }
}

发送Htpp get 请求:

public static <T> T  doHttpGet(String url, Map<String,Object> paramMap, Class<T> t) {
    // 取出参数,拼接成name1=value1&name2=value2形式
    String param = "";
    if (paramMap != null && paramMap.size() > 0) {
        Iterator<String> ite = paramMap.keySet().iterator();
        while (ite.hasNext()) {
            String key = ite.next();// key
            Object value = paramMap.get(key);
            param += key + "=" + value + "&";
        }
        param = param.substring(0, param.length() - 1);
    }
    String result = "";
    BufferedReader in = null;
    try {
        String urlNameString = url + "?" + param;
        URL realUrl = new URL(urlNameString);
        // 打开和URL之间的连接
        URLConnection connection = realUrl.openConnection();
        // 设置通用的请求属性
        connection.setRequestProperty("accept", "*/*");
        connection.setRequestProperty("connection", "Keep-Alive");
        connection.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64)");
        // 建立实际的连接
        connection.connect();
        // 定义 BufferedReader输入流来读取URL的响应
        in = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
        String line;
        while ((line = in.readLine()) != null) {
            result += line;
        }
    } catch (Exception e) {
        System.out.println("发送GET请求出现异常!" + e);
        e.printStackTrace();
        return null;
    }
    // 使用finally块来关闭输入流
    finally {
        try {
            if (in != null) {
                in.close();
            }
        } catch (Exception e2) {
            e2.printStackTrace();
            return null;
        }
    }
    return JsonUtil.fromJson(result,t);
}

发送Http post请求:

public static <T> T doHttpPost(String url, Map<String,Object> paramMap, Class<T> t) {
    PrintWriter out = null;
    BufferedReader in = null;
    String result = "";
    try {
        URL realUrl = new URL(url);
        // 打开和URL之间的连接
        URLConnection conn = realUrl.openConnection();
        // 设置通用的请求属性
        conn.setRequestProperty("accept", "*/*");
        conn.setRequestProperty("connection", "Keep-Alive");
        conn.setRequestProperty("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64)");
        // 发送POST请求必须设置如下两行
        conn.setDoOutput(true);
        conn.setDoInput(true);
        // 获取URLConnection对象对应的输出流
        out = new PrintWriter(conn.getOutputStream());
        // 设置请求属性
        String param = "";
        if (paramMap != null && paramMap.size() > 0) {
            Iterator<String> ite = paramMap.keySet().iterator();
            while (ite.hasNext()) {
                String key = ite.next();// key
                Object value = paramMap.get(key);
                param += key + "=" + value + "&";
            }
            param = param.substring(0, param.length() - 1);
        }
        // 发送请求参数
        out.print(param);
        // flush输出流的缓冲
        out.flush();
        // 定义BufferedReader输入流来读取URL的响应
        in = new BufferedReader( new InputStreamReader(conn.getInputStream(),"utf-8"));
        String line;
        while ((line = in.readLine()) != null) {
            result += line;
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }finally{
        // 关闭流
        try{
            if(out!=null){
                out.close();
            }
            if(in!=null){
                in.close();
            }
        }catch(IOException ex){
            ex.printStackTrace();
            return null;
        }
    }
    return JsonUtil.fromJson(result,t);
}

这里只能做简单的javabean转换,如果需要转换的是带有泛型的javabean,如下:泛型取值的时候会报转换异常,暂时没解决难过

public class ReturnData<T> {
   private String msg;
   private int code;
   private T data;

   public String getMsg() {
      return msg;
   }

   public void setMsg(String msg) {
      this.msg = msg;
   }

   public int getCode() {
      return code;
   }

   public void setCode(int code) {
      this.code = code;
   }

   public T getData() {
      return data;
   }

   public void setData(T data) {
      this.data = data;
   }
}

版权声明:本文为原创,转载需标明出处:

https://blog.youkuaiyun.com/max3215/article/details/80612436


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值