開發工具: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,所以肯定是我接收返回值處理方式不對
這次我果斷的直接又去看了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();
}
}