开发工具: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();
}
}