記一次使用SpringBoot調用阿里身份認證識別OCR接口

開發工具:Idea2019.3
開發環境:SpringBoot2.2+mysql
接口測試工具:swagger
1.先看阿里給的api文檔
在這裏插入圖片描述
不得不說,這個demo是再簡潔明瞭不過了,直接一個main方法執行就可以,二話不說我就複製了代碼,放一個main方法裏面,然後…
在這裏插入圖片描述
我第一反應是,肯定缺少依賴,所以沒有相應的包,就找不到方法,去百度找一波,還是一臉懵逼
在這裏插入圖片描述

又去看了demo,果然,怪我自己眼瞎,人家專門寫了依賴地址的,
在這裏插入圖片描述
github上面給了這些依賴
在這裏插入圖片描述

<dependencies>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.15</version>
		</dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-util</artifactId>
            <version>9.3.7.v20160115</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.5</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

好,弄好了依賴,然後回來看,發現還是報紅線,還是找不到方法,我就又。。。。。
在這裏插入圖片描述
只能再好好再看看demo,果然,我是真的瞎,只看了一半,人家清楚的寫着重要提示,而我…
在這裏插入圖片描述把人家HttpUtils從github上面down下來,再去像模像樣的用身份證照片生成一個BASE64,放進去,準備run一下,果然新的問題又來了,說我base64的字符串常量過長,我當時就想,這幾個意思?難道他們用的時候不長?又不能改成Object類型之類的,方法都是封裝好的。。。。。。。。。。。百度一波發現,我還是太菜了
在這裏插入圖片描述
解決方法如下:在生成BASE64的時候會因爲字符超級長而換行,所以用String裏面的replaceAll()把裏面的換行符號去掉就可以了
在這裏插入圖片描述
寫了個測試接口測了一下
在這裏插入圖片描述
差別還是有點大的,解決了這個,接着往下,跟着demo,這個亞子就應該能看到效果了
在這裏插入圖片描述
然而,打印了一堆,請求頭之類的東西,不過值得注意的是,狀態碼對了的,200,所以肯定是我接收返回值處理方式不對
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200113204359348.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0x5bm5lWm9l,size_16,color_FFFFFF,t_7
在這裏插入圖片描述
這次我果斷的直接又去看了demo,然而這次沒有漏掉什麼了,它除了註釋的,,,,,,,,,,等等,它註釋了一段,那我把註釋的放開看看呢
在這裏插入圖片描述
有那麼個意思,但是,漢字全部變成了ASCII 編碼的格式,看不懂,所以我又去找了半天“Java怎麼將ascll碼轉爲utf-8”,然後試了幾個,看起來並沒有什麼效果
在這裏插入圖片描述
冷靜想一下,emmmmmmmm,他的demo返回值是json格式,而我現在是String,轉Json對象試一下呢
在這裏插入圖片描述
這次沒有意外,成功了,沒錯就是要轉成json格式,我還是太菜了,記錄一下。
貼一個完整的代碼紀念一下

 @RequestMapping(value = "code",method = RequestMethod.POST)
    public void findMethod(@RequestParam("code") MultipartFile file) throws Exception{
        String fileStr = "";
        if (!file.isEmpty())
        {
            BASE64Encoder encoder = new BASE64Encoder();
            // 通過base64來轉化圖片
                try {
                    fileStr =   (encoder.encode(file.getBytes())).replaceAll("\r\n", "");
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
        String host = "https://sfzread.market.alicloudapi.com";
        String path = "/sfzread";
        String method = "POST";
        String appcode = "自己的appcode";
        Map<String, String> headers = new HashMap<String, String>();
        //最後在header中的格式(中間是英文空格)爲Authorization:APPCODE 83359fd73fe94948385f570e3c139105
        headers.put("Authorization", "APPCODE " + appcode);
        //根據API的要求,定義相對應的Content-Type
        headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        Map<String, String> querys = new HashMap<String, String>();
        Map<String, String> bodys = new HashMap<>();
        bodys.put("src",fileStr);
        try {
            HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
            String msg = new String(EntityUtils.toString(response.getEntity()).getBytes(),"UTF-8");
            JSONObject object = JSONObject.parseObject(msg);
            System.out.println("aaaaaaaa"+object);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章