多平台统一管理软件接口,如何实现多平台统一管理软件接口
258
2023-01-08
SpringBoot封装自己的Starter的实现方法
一.说明
我们在使用SpringBoot的时候常常要引入一些Starter,例如spring-boot-starter-web,官方为我们提供了几乎所有的默认配置,很好的降低了使用框架时的复杂度,所以在用xxx-starter的时候,可以不用费心去写一些繁琐的配置文件,即使必要的配置在application.properties或application.yml中配置就可以了,当你实现了一个Starter,可以在不同的项目中复用,非常方便,今天我们来编写自己的Starter以之前的短信业务为例。
Springboot短信业务调用: https://jb51.net/article/160092.htm
spring-boot-starter-xxx是官方提供Starter的命名规则,非官方Starter的命名规则官方建议为 xxx-spring-boot-starter
二.搭建项目
建立SpringBoot项目,清除resources下的文件和文件夹
Maven依赖如下:
二.编写项目基础类
创建SendSMSDTO传输类,用于参数传递
/**
* SMSDTO参数类
* @Author Sans
* @CreateTime 2019/4/20
* @attention
*/
@Data
public class SendSMSDTO {
/**
* 模板ID
*/
private String templateid;
/**
* 参数
*/
private String param;
/**
* 手机号
*/
private String mobile;
/**
* 用户穿透ID,可以为空
*/
private String uid;
}
创建RestTemplateConfig配置类,用于调用短信接口
/**
* RestTemplateConfig配置
* @Author Sans
* @CreateTime 2019/4/20
* @attention
*/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate( ) {
return new RestTemplate();
}
}
创建短信接口枚举类,用于存放短信接口API地址
/**
* 短信请求API枚举
* @Author Sans
* @CreateTime 2019/4/20
* @attention
*/
@Getter
public enum ENUM_SMSAPI_URL {
SENDSMS("https://open.ucpaas.com/ol/sms/sendsms"),
SENDBATCHSMS("https://open.ucpaas.com/ol/sms/sendsms_batch");
private String url;
ENUM_SMSAPI_URL(String url) {
this.url = url;
}
}
三.编写Starter自动配置类
创建SmsProperties配置属性类,该类主要用于读取yml/properties信息
/**
* SMS配置属性类
* @Author Sans
* @CreateTime 2019/4/20
* @attention 使用ConfigurationProperties注解可将配置文件(yml/properties)中指定前缀的配置转为bean
*/
@Data
@ConfigurationProperties(prefix = "sms-config")
public class SmsProperties {
private String appid;
private String accountSid;
private String authToken;
}
创建短信核心服务类
/**
* 短信核心服务类
* @Author Sans
* @CreateTime 2019/4/20
* @attention
*/
public class SmsService {
@Autowired
private RestTemplate restTemplate;
private String appid;
private String accountSid;
private String authToken;
/**
* 初始化
*/
public SmsService(SmsProperties smsProperties) {
this.appid = smsProperties.getAppid();
this.accountSid = smsProperties.getAccountSid();
this.authToken = smsProperties.getAuthToken();
}
/**
* 单独发送
*/
public String sendSMS(SendSMSDTO sendSMSDTO){
JSONObject jsonObject = new JSONObject();
jsonObject.put("sid", accountSid);
jsonObject.put("token", authToken);
jsonObject.put("appid", appid);
jsonObject.put("templateid", sendSMSDTO.getTemplateid());
jsonObject.put("param", sendSMSDTO.getParam());
jsonObject.put("mobile", sendSMSDTO.getMobile());
if (sendSMSDTO.getUid()!=null){
jsonObject.put("uid",sendSMSDTO.getUid());
}else {
jsonObject.put("uid","");
}
String json = JSONObject.toJSONString(jsonObject);
//使用restTemplate进行访问远程Http服务
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity
String result = restTemplate.postForObject(ENUM_SMSAPI_URL.SENDSMS.getUrl(), httpEntity, String.class);
return result;
}
/**
* 群体发送
*/
public String sendBatchSMS(SendSMSDTO sendSMSDTO){
JSONObject jsonObject = new JSONObject();
jsonObject.put("sid", accountSid);
jsonObject.put("token", authToken);
jsonObject.put("appid", appid);
jsonObject.put("templateid", sendSMSDTO.getTemplateid());
jsonObject.put("param", sendSMSDTO.getParam());
jsonObject.put("mobile", sendSMSDTO.getMobile());
if (sendSMSDTO.getUid()!=null){
jsonObject.put("uid",sendSMSDTO.getUid());
}else {
jsonObject.put("uid","");
}
String json = JSONObject.toJSONString(jsonObject);
//使用restTemplate进行访问远程Http服务
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HttpEntity
String result = restTemplate.postForObject(ENUM_SMSAPI_URL.SENDBATCHSMS.getUrl(), httpEntity, String.class);
return result;
}
}
创建SmsAutoConfiguration自动配置类,该类主要用于创建核心业务类实例
/**
* 短信自动配置类
* @Author Sans
* @CreateTime 2019/4/20
* @attention
*/
@Configuration
@EnableConfigurationProperties(SmsProperties.class)//使@ConfigurationProperties注解生效
public class SmsAutoConfiguration {
@Bean
public SmsService getBean(SmsProperties smsProperties){
SmsService smsService = new SmsService(smsProperties);
return smsService;
}
}
四.创建spring.factories文件
spring.factories该文件用来定义需要自动配置的类,SpringBoot启动时会进行对象的实例化,会通过加载类SpringFactoriesLoader加载该配置文件,将文件中的配置类加载到spring容器
在src/main/resources新建METhttp://A-INF文件夹,在META-INF文件夹下新建spring.factories文件.配置内容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.sms.starter.config.SmsAutoConfiguration
五.打包和测试
使用Maven插件,将项目打包安装到本地仓库
新建测试项目,引入我们自己的Starter,Maven依赖如下:
配置测试项目的application.yml
sms-config:
account-sid: //这里填写平台获取的ID和KEY
auth-token: //这里填写平台获取的ID和KEY
appid: //这里填写平台获取的ID和KEY
参数填写自己的手机号和申请的模板以及对应的参数
/**
* 测试短信DEMO
* @Author Sans
* @CreateTime 2019/4/20
* @attention
*/
@RestController
@RequestMapping("/sms")
public class TestController {
@Autowired
private SmsService smsService;
/**
* 短信测试
* @Attention
* @Author: Sans
* @CreateTime: 2019/4/20
*/
@RequestMapping(value = "/sendsmsTest",method = RequestMethod.GET)
public String sendsmsTest(){
//创建传输类设置参数
SendSMSDTO sendSMSDTO = new SendSMSDTO();
sendSMSDTO.setMobile(""); //手机号
sendSMSDTO.setTemplateid(""); //模板
sendSMSDTO.setParam(""); //参数
return smsService.sendSMS(sendSMSDTO);
}
}
项目源码: https://gitee.com/liselotte/sms-spring-boot-starter
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~