如何写springboot项目api的sdk?
1.重要的类,需要用到springboot中的 RestTemplate restTemplate;这个类,方式都是注入的方式,注意依赖需要进行加入进去。
2.ObjectMapper mapper = new ObjectMapper();这个类的作用是将对象转化为String类型的json数据,等转化的类,这里我们需要用到
3.方法:demo案例
public String doPostWithFileUpload( File file, FileTransferEntity fileTransferEntity,String chnlCode,String encryptType){
String url = serviceUtil.geturl();
url=url+"/universalFileTransfer/fileUpload";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
//File file = new File("D:\\360MoveData\\Users\\Administrator\\Pictures\\测试图片\\测试3.txt");
FileSystemResource fileSystemResource = new FileSystemResource(file);
MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
form.add("file",fileSystemResource);
String s = null;
try {
s = mapper.writeValueAsString(fileTransferEntity);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
form.add("body",s);
form.add("chnlCode",chnlCode);
form.add("encryptType",encryptType);
HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);
String s1 = restTemplate.postForObject(url, files, String.class);
String strs = new String(s1.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
return strs;
}
public String doPostWithFileDownload(FileTransferReq fileTransferReq){
String url = serviceUtil.geturl();
url = url+"/universalFileTransfer/fileDownload";
System.out.println("----------------------url"+url);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
String s = null;
try {
s = mapper.writeValueAsString(fileTransferReq);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
HttpEntity<String> files = new HttpEntity<>(s, headers);
String s1 = restTemplate.postForObject(url, files, String.class);
String strs = new String(s1.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
return strs;
}
4.从配置文件中获取需要的数据:
demo:
Properties properties;
{
try {
properties = PropertiesLoaderUtils.loadAllProperties("application.yml");
} catch (IOException e) {
e.printStackTrace();
}
}
public String geturl(){
String eftp_service = properties.getProperty("eftp_service");
String eftp_url = properties.getProperty("eftp_url");
if(eftp_url!=null&&!eftp_url.equals("")){
return eftp_url;
}else if(eftp_service!=null && !eftp_service.equals("")){
return eftp_service;
}else {
throw new NullPointerException("没有配置eftp——Url");
}
}
5.RestTemplateConfig类
package com.web.config;
import com.web.util.Commonutil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.Charset;
import java.util.List;
/**
* 字符编码
* LIMAODONG
*/
@Configuration
public class RestTemplateConfig {
@Autowired
private Commonutil commonutil;
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
/**
* 修改StringHttpMessageConverter字符编码
* @param charset
* @param
* @return
*/
public static RestTemplate getInstance(String charset) {
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if (httpMessageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(Charset.forName(charset));
break;
}
}
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
int readTimeout = commonutil.getReadTimeout();
factory.setReadTimeout(readTimeout);//restTemplate 请求超时时间
int connectTimeout = commonutil.getConnectTimeout();
factory.setConnectTimeout(connectTimeout);// 连接超时
return factory;
}
}
6.将sdk设置为maven本地仓库模式
1.在Maven本地仓库进行jar包导入:
将jar包依赖放在maven本地仓库,可以使用maven的install:install-file
命令。
命令格式如下:
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
参数说明:
- `<path-to-file>`: jar 文件的路径
- `<group-id>`: 组织标识,一般使用公司或者项目的包名
- `<artifact-id>`: 项目标识,一般使用项目名称
- `<version>`: 版本号
- `<packaging>`: 打包方式,jar包这里填写jar
一个示例如下:
```shell
mvn install:install-file -Dfile=C:\Users\Admin\Desktop\mylib.jar -DgroupId=com.mycompany -DartifactId=mylib -Dversion=1.0 -Dpackaging=jar
这个命令会把mylib.jar
这个文件作为com.mycompany:mylib:1.0
这个依赖放在 Maven 本地仓库中。以后在pom.xml中就可以直接引用这个依赖了。
<dependency>
<groupId>com.mycompany</groupId>
<artifactId>mylib</artifactId>
<version>1.0</version>
</dependency>
案例:这边先找到我们jar包的本地路径
D:\360MoveData\Users\Administrator\Desktop\东华\init
然后在idea的命令行执行命令
mvn install:install-file -Dfile=D:\360MoveData\Users\Administrator\Desktop\东华\init\sdkdemo-1.0-SNAPSHOT.jar -DgroupId=com.web -Dar
tifactId=mylib -Dversion=1.0 -Dpackaging=jar
执行完成后根据自己的命令将本地仓库中的依赖引入即可
2.方法的使用
首先修改配置文件在application.yml的配置文件下配置