【本人秃顶程序员】浅析 jdk11 中 HttpClient 的使用

←←←←←←←←←←←← 快!点关注

前期准备

  • JDK 版本 : OpenJDK 11.0.1
  • IDE : idea 2018.3

HttpClient 简介

java.net.http.HttpClient 是 jdk11 中正式启用的一个 http 工具类(其实早在 jdk9 的时候就已经存在了,只是处于孵化期),官方寓意为想要取代 HttpURLConnection 和 Apache HttpClient 等比较古老的开发工具。

新增的 HttpClient 截止到目前(2019年3月)为止其实网络资料还比较少,笔者只是根据一些博文和官方 Demo 自己摸索了一下,做了下总结。

由于是 jdk11 中才正式使用的工具类,距离开发者还很遥远,所以对于源码笔者暂不打算深挖,浅浅的理解怎么使用就行

一、HttpClient

在 Apache HttpClient 中,一般会创建一个 HttpClient 对象来作为门面。java.net.http.HttpClient 的逻辑也差不多,只是创建方式更加时髦了:

//创建 builder
HttpClient.Builder builder = HttpClient.newBuilder();

//链式调用
HttpClient client = builder

                        //http 协议版本  1.1 或者 2
                        .version(HttpClient.Version.HTTP_2) //.version(HttpClient.Version.HTTP_1_1)

                        //连接超时时间,单位为毫秒
                        .connectTimeout(Duration.ofMillis(5000)) //.connectTimeout(Duration.ofMinutes(1))

                        //连接完成之后的转发策略
                        .followRedirects(HttpClient.Redirect.NEVER) //.followRedirects(HttpClient.Redirect.ALWAYS)

                        //指定线程池
                        .executor(Executors.newFixedThreadPool(5))

                        //认证,默认情况下 Authenticator.getDefault() 是 null 值,会报错
                        //.authenticator(Authenticator.getDefault())

                        //代理地址
                        //.proxy(ProxySelector.of(new InetSocketAddress("http://www.baidu.com", 8080)))

                        //缓存,默认情况下 CookieHandler.getDefault() 是 null 值,会报错
                    
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
因为JDK1.3/1.4不支持泛型,所以写法比支持对象嵌套的要复杂,附件是自己研究的一个例子 /* ===========================JSON字符串转换为Java Object===============================*/ String sibill = ""; sibill = "{\"blno\":\"123\",\"cutofftime\":\"2011-1-12\",\"vsl\":\"vsl\",\"voy\":\"voy\",\"port\":\"port\",\"consigneename\":\"consigneename\",\"consigneeaddress\":\"consigneeaddress\",\"consigneecityc\":\"consigneecitycountry\","+ "\"cntr\":[{\"cntrno\":\"111111\",\"cl\":\"拼箱\",\"sealnum\":\"sealnum1\",\"size\":\"40\",\"box\":\"H1\",\"cgo\":[{\"cgonum\":\"cgonum11\",\"cgoweight\":\"cgoweight1\",\"cgosize\":\"cgosize1\",\"cgohscode\":\"cgohscode1\",\"cgoowner\":\"cgoowner1\"}]},"+ "{\"cntrno\":\"222222\",\"cl\":\"整箱\",\"sealnum\":\"sealnum2\",\"size\":\"48\",\"box\":\"G1\",\"cgo\":[{\"cgonum\":\"cgonum21\",\"cgoweight\":\"cgoweight1\",\"cgosize\":\"cgosize1\",\"cgohscode\":\"cgohscode1\",\"cgoowner\":\"cgoowner1\"},{\"cgonum\":\"cgonum22\",\"cgoweight\":\"cgoweight2\",\"cgosize\":\"cgosize2\",\"cgohscode\":\"cgohscode2\",\"cgoowner\":\"cgoowner2\"}]}]"+ "}"; /* 第一步 (直接转换为Java Object) */ SiBillBean sibillbean = (SiBillBean)JSONObject.toBean(JSONObject.fromObject(sibill),SiBillBean.class); /* 第二布 (取出嵌套对象属性值) */ JSONArray arrCntr = sibillbean.getCntr(); for (int i = 0; i < arrCntr.size(); i++) { JSONObject cntr = (JSONObject)arrCntr.get(i); CntrBean cntrBean = (CntrBean)JSONObject.toBean(cntr,CntrBean.class); System.out.println(cntrBean); JSONArray arrCgo = cntrBean.getCgo(); for (int j = 0; j < arrCgo.size(); j++) { JSONObject cgo = (JSONObject)arrCgo.get(j); CgoBean cgoBean = (CgoBean)JSONObject.toBean(cgo,CgoBean.class); System.out.println(cgoBean); } } /* 第二布 end */ /* ===========================Java Object转换为JSON字符串===============================*/ //CGO 1/2/3 CgoBean cgoBean1 = new CgoBean(); cgoBean1.setCgonum("cgo11"); CgoBean cgoBean2 = new CgoBean(); cgoBean2.setCgonum("cgo21"); CgoBean cgoBean3 = new CgoBean(); cgoBean3.setCgonum("cgo22"); //CNTR1 CntrBean cntrBean1 = new CntrBean(); cntrBean1.setCntrno("cntr1"); JSONArray jsonArrayCntr1 = new JSONArray(); jsonArrayCntr1.add(0, cgoBean1); cntrBean1.setCgo(jsonArrayCntr1); //CNTR2 CntrBean cntrBean2 = new CntrBean(); cntrBean2.setCntrno("cntr2"); JSONArray jsonArrayCntr2 = new JSONArray(); jsonArrayCntr2.add(0, cgoBean2); jsonArrayCntr2.add(1, cgoBean3); cntrBean2.setCgo(jsonArrayCntr2); //SIBILL SiBillBean sibillb = new SiBillBean(); sibillb.setBlno("COSU 123456789"); JSONArray jsonArraySiBill = new JSONArray(); jsonArraySiBill.add(0, cntrBean1); jsonArraySiBill.add(1, cntrBean2); sibillb.setCntr(jsonArraySiBill); System.out.println(JSONObject.fromObject(sibillb));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值