java如何根据PostMan发送请求设置接口请求工具类

 更新时间:2024年09月24日 09:13:36   作者:Dubbo-罗  
在Java中调用第三方接口可以通过不同的方式,如使用GET、POST等请求,关键点包括设置正确的请求方式、URL、参数(params)、头信息(headers)和请求体(body),对于不同的数据格式,如XML和JSON,需在header中声明内容类型

java根据PostMan发送请求:设置接口请求工具类

我们使用java代码进行接口远程调用第三方接口时,总会抒写接口代码,那么有这么多种方式进行发送请求。那我们应该怎么使用呢?

比如有webservice接口,比如有Post请求的接口,必须有Get请求的接口。比如传的参数有xml的形式,比如传的参数有json格式等等格式情况,那我们的接口请求代码应该如何区别,抒写呢?

我们要根据postMan中的方式来,只要是能够通过postMan发送成功的请求都可以使用

首先是我们的请求方式

第一点:在postMan的请求方式有:GET、POST、PUT、DELETE请求。

第二点:在PostMan中我们需要传入url链接,那么new HttpGet(url)这里面的url就是链接地址。

GET:HttpGet httpGet = new HttpGet(url);
POST:HttpPost method = new HttpPost(url);
PUT:HttpPut put = new HttpPut(url);
DELETE:HttpDelete delete = new HttpDelete(url);

第三点:在PostMan中我们需要Params的时候:

HttpParams httpParams = new BasicHttpParams();
httpParams.setParameter("","");
httpParams.setParameter("","");
httpParams.setParameter("","");
method.setParams(httpParams);

第四点:在PostMan中我们需要设置Headers,其中方token或者字节编码的时候很使用。

HttpPost method = new HttpPost(url);
method.addHeader("","");
method.addHeader("","");
method.addHeader("","");

第五点:在PostMan中我们需要设置Body,其中需要传入参数,不管是xml还是json都可以。那么我们需要设置两个地方。

1、在第四点中的header中需要设置传入参数的是xml还是json:

method.addHeader("Content-Type","application/json;");这里是json
method.addHeader("Content-Type","application/xml;");这里是xml

2、在传回来的参数中我们需要设置返回的数据类型和字符编码集:param是发送的body参数。

StringEntity entity = new StringEntity(param, "utf-8");
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json;");
method.setEntity(entity);//放入到method请求中。

第六点:这样进行发送请求:method是集合请求方式,Params,Headers,body参数以后的集合。然后进行发送。

CloseableHttpClient httpClient = HttpClients.createDefault();//得到发送。
 HttpResponse resultRep = httpClient.execute(method);

第七点:在PostMan中返回的数据,我们需要如下来接收:

/请求发送成功,并得到响应/

 if (resultRep.getStatusLine().getStatusCode() == 200) {
     String str = "";
     /**读取服务器返回过来的json字符串数据**/
     log.info("=========测试"+resultRep.toString());
     String str4 = EntityUtils.toString(resultRep.getEntity());
     log.info("========str4"+str4);
     result = str4;
 }

举例如下

第一种方法:

 public static String getwebserviceNew(String method,String serviceUrl,String user,String pw,String param){
        try {
        //第一步:选择请求方式:
            PostMethod postMethod = null;
            postMethod = new PostMethod();
            postMethod.setPath(serviceUrl);
            String auth = "bearer "+pw;
      	//第二步:设置header参数
            postMethod.addRequestHeader("Authorization", auth);
            postMethod.setRequestHeader("Content-Type", "text/xml") ;
        //第三步:得到需要发送的body
            String xmlInfo = getXmlInfo(method,user,pw,param);
		//第四步:设置发送的参数编码集:
            postMethod.setRequestEntity(new StringRequestEntity(xmlInfo.toString(),"application/xml","UTF-8"));
            org.apache.commons.httpclient.HttpClient httpClient = new org.apache.commons.httpclient.HttpClient();
        //第五步:发送请求:
            int response = httpClient.executeMethod(postMethod); // 执行POST方法
            log.info("response--接口状态码-->"+response);
            String result = postMethod.getResponseBodyAsString() ;
            log.info("result-接口返回值-->"+result);
            return result;
        } catch (Exception e) {
            log.info("e----->"+e);
            //logger.info("请求异常"+e.getMessage(),e);
            throw new RuntimeException(e.getMessage());
        }
    }

    private static String getXmlInfo(String method,String fydm,String token,String xml) {
        StringBuilder sb = new StringBuilder();
        sb.append("<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:szft='http://szft.tdh/'>");
        sb.append("<soapenv:Header/>");
        sb.append("<soapenv:Body>");
        sb.append("<szft:"+method+">");
        sb.append("<fydm>"+fydm+"</fydm>");
        sb.append("<token>"+token+"</token>");
        sb.append("<xml>"+xml+"</xml>");
        sb.append("</szft:"+method+">");
        sb.append("</soapenv:Body>");
        sb.append("</soapenv:Envelope>");
        return sb.toString();
    }

第二种方法:

    /**
     * http请求接口,获取通达海token和获取通达海代理人使用
     * post请求
     * @param url         url地址
     * @param param     请求参数
     * @param token     token
     * @param ContentType     发送数据类型
     * @return
     * @throws IOException
     * @throws ClientProtocolException
     */
    public static String httpPostAllAgent(String url,String param,String token,String ContentType) throws ClientProtocolException, IOException{

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        url = URLDecoder.decode(url, "UTF-8");
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = null;
        HttpPost method = new HttpPost(url);
        Map<String, Object> headers = new HashMap<String, Object>();
        headers.put("Content-Type", ContentType);
        headers.put("Accept-Charset", "charset=utf-8");
        headers.put("Authorization", token);
        for (Map.Entry<String, Object> head : headers.entrySet()) {
            method.addHeader(head.getKey(), String.valueOf(head.getValue()));
        }
        //设置请求访问时间
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(1000*60).setConnectTimeout(1000*60).build();//设置请求和传输超时时间
        method.setConfig(requestConfig);

        if (null != param) {
            StringEntity entity = new StringEntity(param, "utf-8");
            entity.setContentEncoding("UTF-8");
            entity.setContentType(ContentType);
            method.setEntity(entity);
        }
        HttpResponse resultRep = httpClient.execute(method);
        /**请求发送成功,并得到响应**/
        if (resultRep.getStatusLine().getStatusCode() == 200) {
            String str = "";
            /**读取服务器返回过来的json字符串数据**/
            log.info("=========测试"+resultRep.toString());
            String str4 = EntityUtils.toString(resultRep.getEntity());
            log.info("========str4"+str4);
            result = str4;
        }
        return result;
    }

multipart/form-data请求方式:

    public static String uploadFile(String url, Map<String, Object> mapData){
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String result = "";
        //每个post参数之间的分隔。随意设定,只要不会和其他的字符串重复即可。
        String boundary ="----WebKitFormBoundary5ZMULAAn6mngkXzn";
        try {
            HttpPost httpPost = new HttpPost(url);
            //设置请求头
            httpPost.setHeader("Content-Type","multipart/form-data; boundary="+boundary);
            //HttpEntity builder
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            //字符编码
            builder.setCharset(Charset.forName("UTF-8"));
            //模拟浏览器
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            //boundary
            builder.setBoundary(boundary);
            //multipart/form-data
//            builder.addPart("multipartFile",new FileBody(filePath));
            // binary
//            builder.addBinaryBody("name=\"multipartFile\"; filename=\"test.docx\"", new FileInputStream(file), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流
//            //其他参数
            for (String key : mapData.keySet()) {
                builder.addTextBody(key, mapData.get(key).toString(),  ContentType.create("text/plain", Consts.UTF_8));
            }
            //HttpEntity
            HttpEntity entity = builder.build();
            httpPost.setEntity(entity);
            // 执行提交
            HttpResponse response = httpClient.execute(httpPost);
            //响应
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null) {
                // 将响应内容转换为字符串
                result = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.err.println("result"+result);
        return result;
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Netty学习教程之Netty与Marshalling结合发送对象

    Netty学习教程之Netty与Marshalling结合发送对象

    Netty是由JBOSS提供的一个Java开源框架,之前已经给大家简单介绍了一些基础与使用,下面这篇文章主要给大家介绍了关于Netty与Marshalling结合发送对象的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-05-05
  • Java代码统计网站中不同省份用户的访问数

    Java代码统计网站中不同省份用户的访问数

    这篇文章主要介绍了Java代码统计网站中不同省份用户的访问数 的相关资料,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-05-05
  • Java反射机制原理、Class获取方式以及应用场景详解

    Java反射机制原理、Class获取方式以及应用场景详解

    反射机制是JAVA的核心知识点之一,大多数框架的实现原理就是利用了反射机制,掌握反射机制会使你学习框架更加轻松高效,这篇文章主要给大家介绍了关于Java反射机制原理、Class获取方式以及应用场景的相关资料,需要的朋友可以参考下
    2022-04-04
  • Java线程池如何实现精准控制每秒API请求

    Java线程池如何实现精准控制每秒API请求

    这篇文章主要介绍了Java线程池如何实现精准控制每秒API请求问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Java中的system.getProperty()的作用及使用方法

    Java中的system.getProperty()的作用及使用方法

    System.getProperty() 方法用于获取系统属性的值,该方法接受一个字符串参数,表示要获取的系统属性的名称,返回值为字符串类型,表示该属性的值,接下来通过本文给大家介绍Java中的system.getProperty()的作用及使用方法,感兴趣的朋友跟随小编一起看看吧
    2023-05-05
  • Intellij IDEA 2017新特性之Spring Boot相关特征介绍

    Intellij IDEA 2017新特性之Spring Boot相关特征介绍

    Intellij IDEA 2017.2.2版本针对Springboot设置了一些特性,本篇文章给大家简单介绍一下如何使用这些特性,需要的朋友参考下吧
    2018-01-01
  • SpringBoot模板引擎之Thymeleaf的使用

    SpringBoot模板引擎之Thymeleaf的使用

    这篇文章主要介绍了SpringBoot模板引擎之Thymeleaf的使用,模板引擎是以业务逻辑层和表现层分离为目的的,将规定格式的模板代码转换为业务数据的算法实现,它可以是一个过程代码、一个类,甚至是一个类库,需要的朋友可以参考下
    2023-10-10
  • Java中的Comparable和Comparator接口

    Java中的Comparable和Comparator接口

    这篇文章主要介绍了Java中的Comparable和Comparator接口,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • java 实现读取clob

    java 实现读取clob

    这篇文章主要介绍了java 如何实现读取clob,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-10-10
  • java Volatile与Synchronized的区别

    java Volatile与Synchronized的区别

    这篇文章主要介绍了java Volatile与Synchronized的区别,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-12-12

最新评论