starter 是 SpringBoot 的一个重要的组成部分,它相当于一个可以集成到SpringBoot项目中的模块,比如你想在SpringBoot项目中使用Redis,我们需要做的第一步就是去pom.xml中引入redis相关的start依赖,引入Redis的starter依赖后,我们就可以直接在idea中编写redis相关的代码
同时,在 maven 中引入 starter 依赖之后,SpringBoot 就能自动扫描到要加载的信息并启动相应的默认配置,它遵循“约定大于配置”的理念。
理想情况: 开发者只需要关心调用哪些接口、传递哪些参数,就跟调用自己写的代码一样简单。
开发 starter 的好处: 开发者引入之后,可以直接在 application.yml 中写配置,自动创建相应的客户端。
- package com.lqapiclientsdk.client;
-
- import cn.hutool.core.util.RandomUtil;
- import cn.hutool.http.HttpRequest;
- import cn.hutool.http.HttpResponse;
- import cn.hutool.http.HttpUtil;
- import cn.hutool.json.JSONUtil;
- import com.lqapiclientsdk.model.User;
- import com.lqapiclientsdk.utils.SignUtil;
- import lombok.extern.slf4j.Slf4j;
-
- import java.util.HashMap;
- import java.util.Map;
-
- //创建一个client.层:客户端层,负责与用户交互、处理用户请求,以及调用服务端提供的API接口等任务的部分。
- @Slf4j
- public class LqApiClient {
- private static final String GATEWAY_HOST="http://localhost:8090";
- String accessKey;
- String secretKey;
-
- public LqApiClient(String accessKey, String secretKey) {
- this.accessKey = accessKey;
- this.secretKey = secretKey;
- }
-
- public String ApiInvoke(Object requestParams, String apiUrl) {
- String jsonStr = JSONUtil.toJsonStr(requestParams);
- HttpResponse response = HttpRequest.post(apiUrl)
- .body(jsonStr)
- .addHeaders(getHeaderMap(jsonStr))
- .execute();
- log.info("调用该接口返回的结果状态码:" + response.getStatus());
- String result = response.body(); //hutool 的HttpResponse.body返回的响应体内容已经自动转换成String类型了
- return result;
- }
-
-
- public String getNameByPost(String name) {
- HashMap
paramMap = new HashMap<>(); - paramMap.put("name", name);
- String result = HttpUtil.post("localhost:8123/api/name/", paramMap);
- System.out.println(result);
- return result;
- }
-
- public Map
getHeaderMap(String body) { - HashMap
hashMap = new HashMap(); - hashMap.put("accessKey", accessKey);
- hashMap.put("secretKey", secretKey);
- hashMap.put("body", body);
- //生成随机数,发送给服务器
- hashMap.put("nonce", RandomUtil.randomNumbers(4));
- //生成以秒为单位的时间戳发送给服务器
- hashMap.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
- hashMap.put("sign", SignUtil.getSign(body, secretKey));
- return hashMap;
- }
- }
- package com.lqapiclientsdk;
-
- import com.lqapiclientsdk.client.LqApiClient;
- import lombok.Data;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.Configuration;
-
- @ComponentScan
- @Configuration
- @ConfigurationProperties("lqapi.client")
- @Data//一定得要,不然到时在别的项目引用了这个sdk也无法再yml文件中做配置,因为配置的底层就是通过set方法
- public class LqApiClientConfig {
- String accessKey;
-
- String secretKey;
-
- @Bean
- public LqApiClient lqApiClient(){
- return new LqApiClient(accessKey,secretKey);
- }
-
- }
打开spring.factories,做以下配置
- org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxx.xxxsdk.xxxConfig
- //等号后面填的是你刚刚创建的config配置类路径
\