Java调用外部接口

进行java的C/S软件开发时,对接了一些第三方提供的网页接口。 

使用接口的方式没有想象的那么难。 
比方说提供的接口是一个GET形式时,在网页上直接输出地址,将参数拼凑输入即可得到返回值。 
如果是一个POST接口,就需要使用如POSTMAN或浏览器自带插件等等方式来进行一个接口的请求。 
转化成代码也是如此。 
下面是一个简单的POST接口调用实例: 
P:param参数可使用JSONObject.fromObject(对象)来传入

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

/**

 * @author : cjd

 * @description : post接口 返回结果字符串

 * @params : [url, param]

 * @param url 请求接口

 * @param param 需要的json字符串

 * @return :java.lang.String

 * @date : 17:31 2018/8/1

 */

public static String sendPost(String url, String param) {

    OutputStreamWriter out = null;

    BufferedReader in = null;

    String result = "";        try {

        URL realUrl = new URL(url);

        HttpURLConnection conn = null;            // 打开和URL之间的连接

        conn = (HttpURLConnection) realUrl.openConnection();            // 发送POST请求必须设置如下两行

        conn.setDoOutput(true);

        conn.setDoInput(true);

        conn.setRequestMethod("POST");    // POST方法

 

        // 设置通用的请求属性

        conn.setRequestProperty("accept", "*/*");

        conn.setRequestProperty("connection", "Keep-Alive");

        conn.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

        conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");

        conn.connect();            // 获取URLConnection对象对应的输出流

        out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");            // 发送请求参数

        out.write(param);            // flush输出流的缓冲

        out.flush();            // 定义BufferedReader输入流来读取URL的响应

        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String line;            while ((line = in.readLine()) != null) {

            result += line;

        }

    } catch (Exception e) {

        System.out.println("发送 POST 请求出现异常!" + e);

        e.printStackTrace();

    }        //使用finally块来关闭输出流、输入流

    finally {            try {                if (out != null) {

                out.close();

            }                if (in != null) {

                in.close();

            }

        } catch (IOException ex) {

            ex.printStackTrace();

        }

    }        return result;

}

调用该方法后得到的是对应返回的json数据的字符串格式。 
java是一个面向对象的语言,所以使用JSONObject/JsonArray 将json数据转化为实体类的对象,举个我使用的例子,因为那边返回的接口形式有点奇怪,所以我进行了多步处理如下:

1

2

3

4

5

6

PrePickupMailRes resultBean = new PrePickupMailRes();

JSONObject respJson = JSONObject.fromObject(JSONObject.fromObject(json).get("respJson"));

JSONArray jsonArray = (JSONArray) respJson.get("prePickupRspDetailDTOList");

JSONObject resultJson = (JSONObject) jsonArray.get(0);

JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"MM/dd/yyyy HH:mm:ss"}));

resultBean = (PrePickupMailRes) JSONObject.toBean(resultJson, PrePickupMailRes.class);

这样我们最后得到的就是一个实体对象。

关于JSONObject/JSONArray的使用方法见: 
https://blog.csdn.net/chijiandi/article/details/81011369

进行java的C/S软件开发时,对接了一些第三方提供的网页接口。 
使用接口的方式没有想象的那么难。 
比方说提供的接口是一个GET形式时,在网页上直接输出地址,将参数拼凑输入即可得到返回值。 
如果是一个POST接口,就需要使用如POSTMAN或浏览器自带插件等等方式来进行一个接口的请求。 
转化成代码也是如此。 
下面是一个简单的POST接口调用实例: 
P:param参数可使用JSONObject.fromObject(对象)来传入

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

/**

 * @author : cjd

 * @description : post接口 返回结果字符串

 * @params : [url, param]

 * @param url 请求接口

 * @param param 需要的json字符串

 * @return :java.lang.String

 * @date : 17:31 2018/8/1

 */

public static String sendPost(String url, String param) {

    OutputStreamWriter out = null;

    BufferedReader in = null;

    String result = "";        try {

        URL realUrl = new URL(url);

        HttpURLConnection conn = null;            // 打开和URL之间的连接

        conn = (HttpURLConnection) realUrl.openConnection();            // 发送POST请求必须设置如下两行

        conn.setDoOutput(true);

        conn.setDoInput(true);

        conn.setRequestMethod("POST");    // POST方法

 

        // 设置通用的请求属性

        conn.setRequestProperty("accept", "*/*");

        conn.setRequestProperty("connection", "Keep-Alive");

        conn.setRequestProperty("user-agent",                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

        conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");

        conn.connect();            // 获取URLConnection对象对应的输出流

        out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");            // 发送请求参数

        out.write(param);            // flush输出流的缓冲

        out.flush();            // 定义BufferedReader输入流来读取URL的响应

        in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

        String line;            while ((line = in.readLine()) != null) {

            result += line;

        }

    } catch (Exception e) {

        System.out.println("发送 POST 请求出现异常!" + e);

        e.printStackTrace();

    }        //使用finally块来关闭输出流、输入流

    finally {            try {                if (out != null) {

                out.close();

            }                if (in != null) {

                in.close();

            }

        } catch (IOException ex) {

            ex.printStackTrace();

        }

    }        return result;

}

调用该方法后得到的是对应返回的json数据的字符串格式。 
java是一个面向对象的语言,所以使用JSONObject/JsonArray 将json数据转化为实体类的对象,举个我使用的例子,因为那边返回的接口形式有点奇怪,所以我进行了多步处理如下:

1

2

3

4

5

6

PrePickupMailRes resultBean = new PrePickupMailRes();

JSONObject respJson = JSONObject.fromObject(JSONObject.fromObject(json).get("respJson"));

JSONArray jsonArray = (JSONArray) respJson.get("prePickupRspDetailDTOList");

JSONObject resultJson = (JSONObject) jsonArray.get(0);

JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{"MM/dd/yyyy HH:mm:ss"}));

resultBean = (PrePickupMailRes) JSONObject.toBean(resultJson, PrePickupMailRes.class);

这样我们最后得到的就是一个实体对象。

 

 

转载:http://www.php.cn/java-article-407549.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值