springboot 接口文档 请求 enum_牛批了!三分钟用SpringBoot封装自己的Starter

一.说明

我们在使用SpringBoot的时候常常要引入一些Starter,例如spring-boot-starter-web,官方为我们提供了几乎所有的默认配置,很好的降低了使用框架时的复杂度。

所以在用xxx-starter的时候,可以不用费心去写一些繁琐的配置文件,即使必要的配置在application.properties或application.yml中配置就可以了,当你实现了一个Starter,可以在不同的项目中复用,非常方便,今天我们来编写自己的Starter以之前的短信业务为例。

spring-boot-starter-xxx是官方提供Starter的命名规则,非官方Starter的命名规则官方建议为 xxx-spring-boot-starter

二.搭建项目

建立SpringBoot项目,清除resources下的文件和文件夹

32d855ed33da1f19222df7f18ca3b84d.png

Maven依赖如下:

                             org.springframework.boot            spring-boot-autoconfigure            2.1.3.RELEASE                                    org.springframework.boot            spring-boot-configuration-processor            2.1.3.RELEASE                                    org.projectlombok            lombok            1.18.6            true                                    org.springframework.boot            spring-boot-starter-web            2.1.3.RELEASE                            com.alibaba            fastjson            1.2.45        

spring-boot-configuration-processor不是必须的,它的作用是和编译时生成 spring-configuration-metadata.json,此文件主要给IDEA使用。

配置此JAR相关配置属性在 application.yml中,你可以用Ctrl+鼠标左键点击属性名,IDE会跳转到你配置此属性的类中,并且编写application.yml会有代码提示。

三.编写项目基础类

创建SendSMSDTO传输类,用于参数传递

/** * SMSDTO参数类 * @Author Sans * @CreateTime 2019/4/20  * @attention */@Datapublic 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 */@Configurationpublic class RestTemplateConfig {    @Bean    public RestTemplate restTemplate( ) {        return new RestTemplate();    }}

创建短信接口枚举类,用于存放短信接口API地址

/** * 短信请求API枚举 * @Author Sans * @CreateTime 2019/4/20  * @attention */@Getterpublic 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 httpEntity = new HttpEntity(json, headers);        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 httpEntity = new HttpEntity(json, headers);        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新建META-INF文件夹,在META-INF文件夹下新建spring.factories文件。配置内容如下:

 org.springframework.boot.autoconfigure.EnableAutoConfiguration=        com.sms.starter.config.SmsAutoConfiguration

六.打包和测试

使用Maven插件,将项目打包安装到本地仓库

65539d9408e40c47a187ea6ccfc9e131.png

新建测试项目,引入我们自己的Starter,Maven依赖如下:

                    org.springframework.boot            spring-boot-starter-web                                    com.sms.starter            sms-spring-boot-starter            0.0.1-SNAPSHOT        

配置测试项目的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);    }}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值