调用第三方Api接口操作说明And返回stream流之文件(PDF文件)

调用第三方Api接口操作说明及返回stream流之文件(PDF文件)

先看需求

需求:调用第三方Api接口,Get请求及Post请求以及进行面单下载(PDF格式文件)
Api接口说明:Get请求,Post请求(请求头及请求参数)

操作说明

http请求使用的是HuTool工具类库
如果还不知道这个工具类的,没事,往下看;(给你看这是人情)
如果你看了还不会的,没事,请移步官网查看;(你看了还不会这是事故)
如果你看了也会了,这是人情世故;
好了 不废话了 上才艺。

才艺展示

需要两个依赖:
1丶HuTool
2丶Apache的commons-io(不做文件流不用导入)

<!--Hutool工具类-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.3</version>
</dependency>


<!--Apache的commons-io-->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.4</version>
</dependency>

Get请求

url:第三方Api接口地址
//不带请求头			
String body = HttpUtil.createGet(url).execute().body();

-----------------------------------------------------------------------------------

//RequestHearder 请求头参数
Map<String, String> headers = new HashMap<>();
headers.put("TOKEN", token);

String body = HttpUtil.createGet(url).addHeaders(headers).execute().body();

-----------------------------------------------------------------------------------
返回结果为Json格式 这里是String类型 其实返回的是Json
如果要获取其中某个结果,如下:
String val =(JSON.parseObject(body).getString("code"));
String msg =(JSON.parseObject(body).getString("msg"));
String data =(JSON.parseObject(body).getString("data"));

如果结果里有反斜杠 需要进行反序列化 消除反斜杠
其实这个操作就是得到一个Object类型
Object parse = JSON.parse(data);

Post请求

//RequestBody请求参数
JSONObject jsons = new JSONObject();
jsons.put("prdCode", Order.getPrdCode());

//RequestHearder 请求头参数
Map<String, String> headers = new HashMap<>();
headers.put("TOKEN", token);


带请求头和参数
String body = HttpUtil.createPost(Url).addHeaders(headers).body(jsons).execute().body();

--------------------------------------------------------------------------------------
所以看懂了吧 
如果要发送带请求头的 使用.addHeaders()
如果要发送body参数  使用.body()

Post请求之文件下载

这里重点说明
这个问题搞了一天
也用了HttpUtils这个工具类去尝试 结果没成功

这里的请求参数是list 所以使用JSONArray 
//请求参数
JSONArray jsonArray = new JSONArray();
jsonArray.add(commodityCode);

// 请求头参数
Map<String, String> headers = new HashMap<>();
headers.put("TOKEN", token);

这里是重点 细心的人会发现这次没有去.body() 因为我们要获取的是流 不是json串;
HttpResponse execute = HttpUtil.createPost(url).addHeaders(headers).body(jsonArray).execute();

//设置页面不缓存 这一步一定要在流的写入前进行操作 不然程序会报错
response.reset();

InputStream inputStream = null;
try {
	//设置输出的文件名
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String format = sdf.format(new Date());
    String fileName = format+".pdf";

	//获取输入流
    inputStream = execute.bodyStream();
    
    //设置文件名(这一步要在流的写入前完成 否则设置不生效)
    response.setHeader("Content-Disposition", "attachment;filename="+fileName);  
          
	//输出流
    OutputStream output = response.getOutputStream();
            
    //这里使用了Apache的commons-io
    //IOUtils.copy(输入流,输出流) copy这个流就ok
    IOUtils.copy(inputStream,output);

	//这里要设置application为pdf格式
    response.setContentType("application/pdf;charset=UTF-8");
    }catch (Exception e) {
            log.error(e.getMessage());
            log.error("****************面单下载失败****************");
    }finally {
    		//关闭输入流  输出流可以不用关闭 不归咱们管
            inputStream.close();
    }

总结

看到这里
就结束了
剩下的我也没搞明白

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用iText生成PDF文件需要以下几个步骤: 1. 引入iText库 在项目中引入iText库,可以通过Maven等构建工具导入依赖,也可以手动下载jar包导入。 2. 创建PDF文档 使用iText创建一个PDF文档对象,如下所示: ``` Document document = new Document(); ``` 3. 创建PDF输出流 创建一个输出流,将PDF文档内容输出到指定的文件或者网络流中,如下所示: ``` PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); ``` 4. 打开文档 打开文档,开始编辑内容,如下所示: ``` document.open(); ``` 5. 编辑文档 编辑文档内容,可以插入文字、图片、表格等元素,也可以设置页面大小、边距等属性,具体使用方法见iText官方文档。 6. 关闭文档 编辑完成后,关闭文档,如下所示: ``` document.close(); ``` 完整代码示例: ``` Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); document.open(); document.add(new Paragraph("Hello World!")); document.close(); ``` 根据调用第三方接口返回文件流生成PDF文件,可以将文件流读取到内存中,然后通过iText的Image类创建图片对象,将图片插入到PDF中,具体代码示例如下: ``` // 假设fileStream调用第三方接口返回文件流 InputStream fileStream = ...; // 创建PDF文档对象和PDF输出流 Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); // 打开文档,开始编辑内容 document.open(); // 创建图片对象 Image image = Image.getInstance(IOUtils.toByteArray(fileStream)); // 设置图片大小 image.scaleAbsolute(400, 400); // 插入图片到PDF中 document.add(image); // 关闭文档 document.close(); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值