项目场景:
Java1.8SpringBoot2.2.x
引入SDK:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dyvmsapi20170525</artifactId>
<version>0.0.2</version>
</dependency>
问题描述:
在实际调用SDK语音通知接口时,无法正常获取请求响应: 在以下代码中,手机已经能正常接收到通知,但是代码内无法获取请求响应,控制台抛出以下异常:异常
Exception in thread "main" java.lang.NoSuchMethodError: okhttp3.Headers.iterator()Ljava/util/Iterator;
at com.aliyun.tea.TeaResponse.<init>(TeaResponse.java:30)
at com.aliyun.tea.Tea.doAction(Tea.java:70)
at com.aliyun.tearpc.Client.doRequest(Client.java:154)
at com.aliyun.dyvmsapi20170525.Client.singleCallByTtsWithOptions(Client.java:398)
at com.aliyun.dyvmsapi20170525.Client.singleCallByTts(Client.java:403)
at com.hzqx.www.work.dyvms.CustomDyvmsClient.execute(CustomDyvmsClient.java:38)
at com.hzqx.www.work.task.WarningTask.gridWarning(WarningTask.java:116)
at com.hzqx.www.work.task.WarningTask.gridAMWarning(WarningTask.java:54)
at com.hzqx.www.work.task.WarningTask.main(WarningTask.java:95)
代码:
package com.hzqx.www.work.dyvms;
import com.alibaba.fastjson.JSON;
import com.aliyun.dyvmsapi20170525.models.SingleCallByTtsRequest;
import com.aliyun.dyvmsapi20170525.models.SingleCallByTtsResponse;
import com.aliyun.tea.TeaConverter;
import com.aliyun.tea.TeaPair;
import com.aliyun.tearpc.models.Config;
import com.aliyun.dyvmsapi20170525.Client;
import lombok.extern.slf4j.Slf4j;
/**
* @author YangXiaohui
* @since 2020/11/18 10:31
*/
@Slf4j
public class CustomDyvmsClient {
private final Client client;
private final Config config;
public CustomDyvmsClient(String accessKeyId, String accessKeySecret,String regionId) throws Exception {
this.config=new Config();
this.config.accessKeyId=accessKeyId;
this.config.accessKeySecret=accessKeySecret;
this.config.regionId=regionId;
this.client=new Client(this.config);
}
public void execute(String ttsCode,String calledNumber) throws Exception {
SingleCallByTtsRequest request = SingleCallByTtsRequest.build(TeaConverter.buildMap(
new TeaPair("calledShowNumber", ""),
new TeaPair("calledNumber", calledNumber),
new TeaPair("ttsCode", ttsCode),
new TeaPair("speed", -100),
new TeaPair("playTimes", 3)
));
SingleCallByTtsResponse response=this.client.singleCallByTts(request);
log.info(response.toString());
}
public void execute(String ttsCode,String ttsParamJsonStr,String calledNumber) throws Exception {
SingleCallByTtsRequest request = SingleCallByTtsRequest.build(TeaConverter.buildMap(
new TeaPair("calledShowNumber", ""),
new TeaPair("calledNumber", calledNumber),
new TeaPair("ttsCode", ttsCode),
new TeaPair("ttsParam", ttsParamJsonStr),
new TeaPair("speed", -100),
new TeaPair("playTimes", 3)
));
SingleCallByTtsResponse response=this.client.singleCallByTts(request);
log.info(JSON.toJSONString(response));
}
public static void main(String[] args) throws Exception {
CustomDyvmsClient client=new CustomDyvmsClient("accessKeyId","accessKeySecret","cn-hangzhou");
client.execute("TTS_205123469","15836204523");
}
}
原因分析:
抛出的异常为`java.lang.NoSuchMethodError`,这个异常在Java内部是没有找到要调用的方法时抛出的,和NoClassxxx是一类的,所以考虑是缺失了`okhttp3`的依赖导致的问题解决方案:
pom文件增加okhttp3依赖<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>