发表于: 2018-03-11 20:58:37
1 1024
今天完成的事情
springmvc Junit4 @RunWith 详解
https://jingyan.baidu.com/article/4b52d702be539ffc5c774bc9.html
关于spring-mybatis测试接口:
//加载@RunWith(SpringJUnit4ClassRunner.class)。这个是用springmvc的容器。
@RunWith(SpringJUnit4ClassRunner.class)
//加载Spring配置文件
@ContextConfiguration(locations = {"classpath*:spring-mybatis.xml"})
然后去看了看阿里云的api,准备做任务七。
首先需要在阿里云开通短信验证:
进入阿里云服务器控制台,找到短信服务
.png)

可以免费开通,然后充值大概五块到十块作为经费,因为发送短信一条四分钱。
然后在短信服务的左侧,找到模板管理和签名签名管理,分别申请到自己的签名和模板。审核时间大概在半个小时到一个小时之间。
.png)

审核通过以后,可以在接口调用中看到这样的:
.png)

签名和模板分别是这样的:
.png)


分别记录下上面的:签名名称,模版CODE, AccessKey和 IDAccessKeySecret,填入到下面的工具类中:
************************************************************************************************************************
发送短信工具类:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
public class MoblieMessageUtil {
// 产品名称:云通信短信API产品,开发者无需替换
static final String product = "Dysmsapi";
// 产品域名,开发者无需替换
// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
static final String accessKeyId = "你的accessKeyId"; //-------------------改这里
static final String accessKeySecret = "你的accessKeySecret"; //-------------改这里
public static SendSmsResponse sendSms(String telephone, String code) throws ClientException {
// 可自助调整超时时间
// 初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
// 组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
// 必填:待发送手机号
request.setPhoneNumbers(telephone);
// 必填:短信签名-可在短信控制台中找到
request.setSignName("你的短信签名"); //改这里
// 必填:短信模板-可在短信控制台中找到
request.setTemplateCode("你的短信模板编号"); //改这里
// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的用户,您的验证码为${code}"时,此处的值为
request.setTemplateParam("{\"code\":\"" + code + "\"}");
// 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
// request.setSmsUpExtendCode("90997");
// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");
// hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
return sendSmsResponse;
}
//验证程序是否能够运行,输入手机号就可以接收到验证短信
public static void main(String[] args) throws Exception {
//验证码可以用随机生成
SendSmsResponse sendSms = sendSms("你的手机号", "你的验证码,建议六位数");
System.out.println("短信接口返回的数据----------------");
System.out.println("Code=" + sendSms.getCode());
System.out.println("Message=" + sendSms.getMessage());
System.out.println("RequestId=" + sendSms.getRequestId());
System.out.println("BizId=" + sendSms.getBizId());
}
}
返回的几种结果如下:
1.AccessKey和 IDAccessKeySecret不正确
.png)

2.无效验证码:
.png)

阿里云错误码大全:
'InvalidDayuStatus.Malformed' => '账户短信开通状态不正确',
'InvalidSignName.Malformed' => '短信签名不正确或签名状态不正确',
'InvalidTemplateCode.MalFormed' => '短信模板Code不正确或者模板状态不正确',
'InvalidRecNum.Malformed' => '目标手机号不正确,单次发送数量不能超过100',
'InvalidParamString.MalFormed' => '短信模板中变量不是json格式',
'InvalidParamStringTemplate.Malformed' => '短信模板中变量与模板内容不匹配',
'InvalidSendSms' => '触发业务流控',
'InvalidDayu.Malformed' => '变量不能是url,可以将变量固化在模板中',
'isv.BUSINESS_LIMIT_CONTROL' => '超出限制,每分钟1条,累计每小时7条',
'isp.RAM_PERMISSION_DENY' => 'RAM权限DENY',
'isv.OUT_OF_SERVICE' => '业务停机',
'isv.PRODUCT_UN_SUBSCRIPT' => '未开通云通信产品的阿里云客户',
'isv.PRODUCT_UNSUBSCRIBE' => '产品未开通',
'isv.ACCOUNT_NOT_EXISTS' => '账户不存在',
'isv.ACCOUNT_ABNORMAL' => '账户异常',
'isv.SMS_TEMPLATE_ILLEGAL' => '短信模板不合法',
'isv.SMS_SIGNATURE_ILLEGAL' => '短信签名不合法',
'isv.INVALID_PARAMETERS' => '参数异常',
'isp.SYSTEM_ERROR' => '系统错误',
'isv.MOBILE_NUMBER_ILLEGAL' => '非法手机号',
'isv.MOBILE_COUNT_OVER_LIMIT' => '手机号码数量超过限制',
'isv.TEMPLATE_MISSING_PARAMETERS' => '模板缺少变量',
'isv.INVALID_JSON_PARAM' => 'JSON参数不合法,只接受字符串值',
'isv.BLACK_KEY_CONTROL_LIMIT' => '黑名单管控',
'isv.PARAM_LENGTH_LIMIT' => '参数超出长度限制',
'isv.PARAM_NOT_SUPPORT_URL' => '不支持URL',
'isv.AMOUNT_NOT_ENOUGH' => '账户余额不足'
3.正确回应结果:
.png)

明天计划的事情:
遇到的问题:
1.阿里云的依赖包始终无法下载,于是尝试从本地进行安装,但是在安装的过程中,程序一直报错:
[ERROR] The goal you specified requires a project to execute but there is no POM in this directory (A:\). Please verify you invoked Maven from the correct directory. -> [Help 1]
百度翻译如下:
您指定的目标需要执行一个项目,但这个目录中没有POM(A:\)。请验证您调用Maven从正确的目录。
原因和解决方法
报错说是需要一个工程来执行,但是没有POM,推测是maven工程的执行开始于pom.xml,正如javaweb工程开始于web.xml,这句话意思是想要执行一个maven工程,目录底下必须有pom.xml,现在没有,所有报错了。我的解决方法是进入到maven工程根目录下面(有pom.xml),然后执行mvn install就好了。但是我在maven的根目录下没有看见pom.xml,后来反应过来,直接去项目的目录下去安装不就好了。突然想明白,会不会IDEA在第一次引入依赖的时候,其实也是这个流程,以后直接去到这个仓库就可以完成引用。
首先下载对应的jar包:
阿里云的jar包: aliyun-java-sdk-core-3.3.1.jar aliyun-java-sdk-dysmsapi-1.0.0.jar
然后在IDEA的Terminal命令行中输入以下命令:
.png)

mvn install:install-file -Dfile=A:\aliyun-java-sdk-core-3.2.4.jar -DgroupId=com.aliyun -DartifactId=aliyun-java-sdk-core -Dversion=3.2.4 -Dpackaging=jar
IDEA的Terminal命令行打开教程:
安装指定文件到本地仓库命令:
mvn install:install-file
-DgroupId=<groupId> : 设置项目代码的包名(一般用组织名)
-DartifactId=<artifactId> : 设置项目名或模块名
-Dversion=1.0.0 : 版本号
-Dpackaging=jar : 什么类型的文件(jar包)
-Dfile=<myfile.jar> : 指定jar文件路径与文件名(同目录只需文件名)
对应的依赖代码如下:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.2.4</version>
</dependency>
收获:
1.简单了如何使用第三方API。
2.牛师兄有一个师弟问了一个问题,为什么不加索引的前提下,查询第一条数据和查询最后一条数据所花的时间是一样的。
提示:数据库会先查询所有数据,然后才返回结果。
评论