记一次使用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();
        }
    }

在这里插入图片描述

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