最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java+Okhttp3調(diào)用接口的實(shí)例

 更新時(shí)間:2023年12月16日 10:07:23   作者:木昜楊的書  
這篇文章主要介紹了java+Okhttp3調(diào)用接口的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

application.yml層的接口配置

ocr:
  generalUrl: http://localhost:9000/ocr/general   #常規(guī)識(shí)別接口地址
  toOFDUrl: http://localhost:9000/ocr/toOFD   #識(shí)別并生成ofd文件接口地址
  queryUrl: http://localhost:9000/ocr/query   #查詢結(jié)果接口地址
  fetchUrl: http://localhost:9000/ocr/fetch   #獲取結(jié)果接口地址

以方便后期對接口地址進(jìn)行更改替換

OkhttpAPI.java 工具類(接口的調(diào)用)

package com.ocr.ocr.utils;

import okhttp3.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.util.concurrent.TimeUnit;

import static com.ocr.ocr.utils.MultipartFileToFile.deleteTempFile;
import static com.ocr.ocr.utils.MultipartFileToFile.multipartFileToFile;

/**
 * @author dayang
 * @date 2021/12/23 16:30
 */
public class OkHttpApi {

    /**
     * 常規(guī)識(shí)別
     * @param multiFile 文件
     * @param filename 文件名
     * @return
     * @throws Exception
     */
    public String ocrFilePost(MultipartFile multiFile, String filename,String generalUrl) throws Exception{

        File file = null;
        String result = null;
        String type = "";
        try {
            //將MultipartFile轉(zhuǎn)為File
            file = multipartFileToFile(multiFile);
            //獲取文件格式
            String suffix = filename.substring(filename.lastIndexOf(".") + 1);
            if (suffix.equals("pdf")){
                type = type + suffix;
            }else if (suffix.equals("ofd")){
                type = type + suffix;
            }else{
                type = type + "img";
            }
            // file是要上傳的文件 File()
            RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
            OkHttpClient client = new OkHttpClient().newBuilder().build();
//        MediaType mediaType = MediaType.parse("text/plain");
            //拼裝參數(shù)
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("file",filename)
                    .addFormDataPart("format",type)
                    .addFormDataPart("file",multiFile.getOriginalFilename(),fileBody)
                    .build();
            //路徑
            Request request = new Request.Builder()
                    .url(generalUrl)
                    .method("POST", body)
                    .build();

            Response response = client.newCall(request).execute();
            //獲取反饋內(nèi)容
            result = response.body().string();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("上傳失敗");
        } finally {
            deleteTempFile(file);
        }
        return result;
    }

    /**
     * 識(shí)別并生成ofd
     * @param multiFile 文件
     * @param filename 文件名
     * @return
     * @throws Exception
     */
    public String ocrFileToOfd(MultipartFile multiFile, String filename,String toOFDUrl) throws Exception{

        File file = null;
        String result = null;
        String type = "";
        try {
            //將MultipartFile轉(zhuǎn)為File
            file = multipartFileToFile(multiFile);
            //獲取文件格式
            String suffix = filename.substring(filename.lastIndexOf(".") + 1);
            if (suffix.equals("pdf")){
                type = type + suffix;
            }else if (suffix.equals("ofd")){
                type = type + suffix;
            }else{
                type = type + "img";
            }
            // file是要上傳的文件 File()
            RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
            OkHttpClient client = new OkHttpClient().newBuilder().build();
//        MediaType mediaType = MediaType.parse("text/plain");
            //拼裝參數(shù)
            RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                    .addFormDataPart("file",filename)
                    .addFormDataPart("format",type)
                    .addFormDataPart("file",multiFile.getOriginalFilename(),fileBody)
                    .build();
            //路徑
            Request request = new Request.Builder()
                    .url(toOFDUrl)
                    .method("POST", body)
                    .build();

            Response response = client.newCall(request).execute();
            //獲取反饋內(nèi)容
            result = response.body().string();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("上傳失敗");
        } finally {
            deleteTempFile(file);
        }
        return result;
    }

    /**
     * 查詢結(jié)果
     * 同步請求
     * @param id   查詢的id
     * @param type 查詢的type
     * @return
     * @throws IOException
     */
    public String getEXBody(String id,String type,String queryUrl) throws IOException {
        OkHttpClient client = new OkHttpClient().newBuilder()
                .connectionPool(new ConnectionPool())
                .connectTimeout(30000, TimeUnit.MILLISECONDS)
                .readTimeout(100000, TimeUnit.MILLISECONDS)
                .build();
        final String[] body = {null};
        //拼裝參數(shù)
        String url = queryUrl + "?id="+id+"&type="+type;
        Request request = new Request.Builder()
                .url(url)
                .header("id",id)
                .header("type",type)
                .build();
        try (Response response = client.newCall(request).execute()) {
            return response.body().string();
        }
    }

    /**
     * 查詢結(jié)果
     * 異步請求
     * @param id   查詢的id
     * @param type 查詢的type
     * @return
     * @throws IOException
     */
    public String getEQBody(String id,String type,String queryUrl) throws IOException {
        OkHttpClient client = new OkHttpClient().newBuilder()
                .connectionPool(new ConnectionPool())
                .connectTimeout(50000, TimeUnit.MILLISECONDS)
                .readTimeout(100000, TimeUnit.MILLISECONDS)
                .build();
        final String[] msg = {""};
        //拼裝參數(shù)
        String url = queryUrl + "?id=" + id + "&type=" + type;
        Request request = new Request.Builder()
                .url(url)
                .header("id",id)
                .header("type",type)
                .build();
        Call call = client.newCall(request);//3.使用client去請求
        call.enqueue(new Callback() {//4.回調(diào)方法
            public void onFailure(Call call, IOException e) {
                System.err.println("返回的結(jié)果的值失敗");
            }
            public void onResponse(Call call, Response response) throws IOException {
                String result = response.body().string();//5.獲得網(wǎng)絡(luò)數(shù)據(jù)
                msg[0] = msg[0] + result;
                System.out.println(result);
            }
        });
        return msg[0];
    }

    /**
     * 獲取結(jié)果
     * 同步請求
     * @param id   查詢的id
     * @return
     * @throws IOException
     */
    public String getOfdBody(String id,String fetchUrl) throws IOException {
        OkHttpClient client = new OkHttpClient().newBuilder()
                .connectionPool(new ConnectionPool())
                .connectTimeout(30000, TimeUnit.MILLISECONDS)
                .readTimeout(100000, TimeUnit.MILLISECONDS)
                .build();
        final String[] body = {null};
        //拼裝參數(shù)
        String url = fetchUrl + "?id="+id;
        Request request = new Request.Builder()
                .url(url)
                .header("id",id)
                .build();
        try (Response response = client.newCall(request).execute()) {
            return response.body().string();
        }
    }

}

因?yàn)轫?xiàng)目需要每個(gè)請求都加有條件和傳輸類型,各位根據(jù)自己的需要進(jìn)行修改即可。

OcrServiceImpl.java 調(diào)用實(shí)例

package com.ocr.ocr.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ocr.ocr.service.OcrService;
import com.ocr.ocr.utils.OkHttpApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;

/**
 * @author dayang
 * @date 2021/12/27 14:11
 */
@Service
public class OcrServiceImpl implements OcrService {

    // 超時(shí)時(shí)間設(shè)置為30秒
    private static final long TIMEOUT = 60000;

    @Value("${ocr.generalUrl}")
    private String generalUrl;

    @Value("${ocr.toOFDUrl}")
    private String toOFDUrl;

    @Value("${ocr.queryUrl}")
    private String queryUrl;

    @Value("${ocr.fetchUrl}")
    private String fetchUrl;

    private String fileName;

    private String fileType;

    private String fileSize;

    private String message;

    private String ofdId;

    private String ofdType;

    private String ofdUrl;

    @Override
    public String uploadFile(MultipartFile file) throws Exception {

        DecimalFormat df = new DecimalFormat("#.00");
        fileName = file.getOriginalFilename();

        //常規(guī)識(shí)別
        OkHttpApi api_general = new OkHttpApi();
        String ocr = api_general.ocrFilePost(file,fileName,generalUrl);
        JSONObject jsonObject = JSON.parseObject(ocr);
        String id = jsonObject.getString("id");
        String type = jsonObject.getString("type");

        //查詢結(jié)果
        OkHttpApi api_query = new OkHttpApi();
        long requestTime = System.currentTimeMillis();
        String msg ="";
        //get查詢結(jié)果
        //1 如果沒請求到則輪詢,直到獲取內(nèi)容或超時(shí)
        while((System.currentTimeMillis() - requestTime) < TIMEOUT){
            String getbody = api_query.getEXBody(id,type,queryUrl);
            //將獲取到的getbody換成json對象
            JSONObject objbody = JSON.parseObject(getbody);
            //2.獲取json字符串的result部分
            String strresult = objbody.getString("result");
            if (strresult != null) {
                //3.將result部分再轉(zhuǎn)為Json數(shù)組
                JSONArray objArray = JSON.parseArray(strresult);
                //4.根據(jù)數(shù)組長度取出每一頁
                for (int i = 0; i < objArray.size();i++){
                    //獲取每一頁的內(nèi)容
                    String list = objArray.getString(i);
                    //將獲得的內(nèi)容json格式化
                    JSONObject objcontent = JSON.parseObject(list);
                    //獲取content中的內(nèi)容
                    String strcontent = objcontent.getString("content");
                    //將content部分再轉(zhuǎn)化為json數(shù)組
                    JSONArray artcontent = JSON.parseArray(strcontent);
                    //5.取出每一頁當(dāng)中的值
                    for (int j = 0; j < artcontent.size();j++){
                        //獲取頁面當(dāng)中的內(nèi)容
                        String content = artcontent.getJSONObject(j).getString("text");
                        msg = msg + content + "\r\n";
                    }
                    msg = msg + "\r\n";
                }
                break; // 跳出循環(huán),返回?cái)?shù)據(jù)
            } else {
                Thread.sleep(1000);// 休眠1秒
            }
        }
        message = msg;

        //識(shí)別并生成OFD
        OkHttpApi api_toOFD = new OkHttpApi();
        String ofd = api_toOFD.ocrFileToOfd(file,file.getOriginalFilename(),toOFDUrl);
        JSONObject jsonObject1 = JSON.parseObject(ofd);
        ofdId = jsonObject1.getString("id");
        ofdType = jsonObject1.getString("type");


        fileType = file.getContentType();
        if (file.getSize() < 1024){
            fileSize = df.format((double) file.getSize()) + "B";
        }
        else if (file.getSize() < 1048576){
            fileSize = df.format((double) file.getSize() / 1024) + "KB";
        }
        else if (file.getSize() < 1073741824){
            fileSize = df.format((double) file.getSize() / 1048576) + "MB";
        }
        else{
            fileSize = df.format((double) file.getSize() / 1073741824) + "GB";
        }

        return "上傳成功";
    }

    @Override
    public String downloadById(String ofdid,String ofdtype) throws Exception {
        //獲取ofd url地址
        OkHttpApi api = new OkHttpApi();
        long requestTime = System.currentTimeMillis();
            //get查詢結(jié)果
            while((System.currentTimeMillis() - requestTime) < TIMEOUT){
                String getbody = api.getEXBody(ofdid,ofdtype,queryUrl);
                //1.將獲取到的getbody換成json對象
                JSONObject objbody = JSON.parseObject(getbody);
                //2.獲取json字符串的result部分
                String success = objbody.getString("success");
                String fetch = objbody.getString("fetch");
                if (fetch != null){
                    if (success.equals("true") && fetch.equals("true")){
                        OkHttpApi apiofd = new OkHttpApi();
                        String ofd = apiofd.getOfdBody(ofdid,fetchUrl);
                        if (!ofd.isEmpty()){
                            ofdUrl = fetchUrl +"?id="+ ofdid;
                        }
                }
                    break;
                }else {
                    Thread.sleep(1000);// 休眠1秒
                }
            }
        return ofdUrl;
    }

    @Override
    public Map<String, String> maplist() {
        Map<String,String> map = new HashMap<>();
        map.put("filename",fileName);
        map.put("filetype",fileType);
        map.put("filesize",fileSize);
        map.put("msg",message);
        map.put("ofdid",ofdId);
        map.put("ofdtype",ofdType);
        return map;
    }

}

根據(jù)自己的需求對調(diào)用的接口進(jìn)行數(shù)據(jù)處理

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用Unsafe類的示例詳解

    Java使用Unsafe類的示例詳解

    java不能直接訪問操作系統(tǒng)底層,而是通過本地方法來訪問。Unsafe類提供了硬件級別的原子操作,這篇文章主要介紹了Java使用Unsafe類,需要的朋友可以參考下
    2021-09-09
  • Java輕松實(shí)現(xiàn)將Excel文本替換為圖片

    Java輕松實(shí)現(xiàn)將Excel文本替換為圖片

    在日常工作和項(xiàng)目開發(fā)中,Excel作為數(shù)據(jù)展示和報(bào)告生成的利器,卻也常常暴露出一些局限性,本文將展示如何使用Java將Excel工作表中的文本替換為圖片,有需要的小伙伴可以了解下
    2025-09-09
  • Java開發(fā)常用類庫之Hutool詳解

    Java開發(fā)常用類庫之Hutool詳解

    這篇文章主要介紹了Java開發(fā)常用類庫之Hutool,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行

    Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行

    這篇文章主要介紹了Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行,在本節(jié)示例中,我們將創(chuàng)建兩個(gè)線程,一個(gè)是普通線程,向隊(duì)列中寫入事件,另外一個(gè)是守護(hù)線程,清除隊(duì)列中的事件,需要的朋友可以參考下
    2014-12-12
  • hadoop?詳解如何實(shí)現(xiàn)數(shù)據(jù)排序

    hadoop?詳解如何實(shí)現(xiàn)數(shù)據(jù)排序

    在很多業(yè)務(wù)場景下,需要對原始的數(shù)據(jù)讀取分析后,將輸出的結(jié)果按照指定的業(yè)務(wù)字段進(jìn)行排序輸出,方便上層應(yīng)用對結(jié)果數(shù)據(jù)進(jìn)行展示或使用,減少二次排序的成本
    2022-02-02
  • Java的HashTable源碼解讀

    Java的HashTable源碼解讀

    這篇文章主要介紹了Java的HashTable源碼解讀,HashTable繼承了Dictionary類,提供了一些字典相關(guān)的基本功能如添加、刪除、判空、獲取元素?cái)?shù)量等,需要的朋友可以參考下
    2023-12-12
  • 深入解析HashMap的put方法

    深入解析HashMap的put方法

    在Java集合中,HashMap的重要性不言而喻,作為一種存儲(chǔ)鍵值對的數(shù)據(jù)結(jié)構(gòu),它在日常開發(fā)中有著非常多的應(yīng)用場景,也是面試中的高頻考點(diǎn),本篇文章就來分析一下HashMap集合中的put方法
    2022-01-01
  • Java?web開發(fā)環(huán)境的搭建超完整步驟

    Java?web開發(fā)環(huán)境的搭建超完整步驟

    這篇文章主要介紹了如何安裝和配置IDEA?2020.1.1?X64版本軟件,包括創(chuàng)建Java?Web項(xiàng)目、配置Tomcat、部署Tomcat?API以及創(chuàng)建和配置Servlet,通過這些步驟,新手可以快速搭建起Javaweb開發(fā)環(huán)境,需要的朋友可以參考下
    2024-11-11
  • java中ConcurrentHashMap的讀操作為什么不需要加鎖

    java中ConcurrentHashMap的讀操作為什么不需要加鎖

    ConcurrentHashMap完全允許多個(gè)讀操作并發(fā)進(jìn)行,讀操作并不需要加鎖。所以下面這篇文章主要給大家介紹了關(guān)于java中ConcurrentHashMap的讀操作為什么不需要加鎖的相關(guān)資料,需要的朋友可以參考下
    2018-10-10
  • jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼示例詳解

    jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼示例詳解

    這篇文章主要介紹了jmeter添加自定義擴(kuò)展函數(shù)之圖片base64編碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01

最新評論

京山县| 阿拉善盟| 商河县| 阿荣旗| 库伦旗| 泰来县| 长海县| 外汇| 隆林| 甘肃省| 高陵县| 秭归县| 南召县| 卓资县| 峨眉山市| 红河县| 潍坊市| 奈曼旗| 绵阳市| 岱山县| 泾源县| 龙游县| 泽普县| 福建省| 孙吴县| 合江县| 富川| 沂源县| 凭祥市| 长岛县| 永宁县| 和林格尔县| 舟山市| 偃师市| 乌鲁木齐市| 新津县| 会宁县| 建阳市| 遂昌县| 龙南县| 织金县|