如何调用封装工具类调用网上接口查询工作日

如何调用封装工具类调用网上接口查询工作日


这里的编辑器是STS,用的springboot集成环境;
先引进pom.xml依赖包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>boloDemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>boloDemo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
		<!-- <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> 
			<version>1.6.2</version> </dependency> -->
		<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
		<!-- <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> 
			<version>1.1.1</version> </dependency> -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>3.11.0</version>
		</dependency>
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>mockwebserver</artifactId>
			<version>3.11.0</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.jsoup</groupId>
			<artifactId>jsoup</artifactId>
			<version>1.7.3</version>
		</dependency>

	</dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>



public class OkTool {
	@Autowired
	//private OkHttpClient.Builder cb;
	private OkHttpClient client;
	@Autowired
	private Request.Builder rb;
	private Map<String, String>formData=new HashMap<>();
	
	private String url;
	
	public OkTool url(String url) {
		this.url=url;
		return this;
	}
	
	public OkTool addFormData(String key,String value) {
		formData.put(key, value);
		return this;
	}
	
	public String get() throws IOException {
		Response response=null;
		if (formData.size()==0) {
			response=client.newCall(rb.url(url).build()).execute();
		}else {
			StringBuffer sb=new StringBuffer();
			sb.append(url);
			if (!url.contains("?")) {
				sb.append("?");
			}
			else {
				sb.append("&");
			}
			Set<String>key=formData.keySet();
			for (String string : key) {
				sb.append(string+"="+formData.get(string)+"&");
			}
			url=sb.toString().substring(0,sb.length()-1);
			response=client.newCall(rb.url(url).build()).execute();
		}
		url=null;
		formData.clear();
		if (response!=null) {
			return response.body().string();
		}
		return null;
	}
	
	public String post() throws IOException {
		Response response=null;
		FormBody.Builder fb=new FormBody.Builder();
		if (formData.size()==0) {
			response=client.newCall(rb.url(url).build()).execute();
		}else {
			Set<String>key=formData.keySet();
			for (String string : key) {
				fb.add(string, formData.get(string));
			}
			response=client.newCall(rb.url(url).post(fb.build()).build()).execute();
		}
		url=null;
		formData.clear();
		if (response!=null) {
			return response.body().string();
		}
		return null;
	}
	
	public String json() throws IOException {
		ObjectMapper ob=new ObjectMapper();
		Response response=null;
		//没有加入post的数据,所以自动的用get方法
		if (formData.size()==0) {
			response=client.newCall(rb.url(url).build()).execute();
		}else {
			MediaType mt=MediaType.parse("application/json; charset=utf-8");
			//创建以json方式提交的body
			RequestBody body=RequestBody.create(mt, ob.writeValueAsString(formData));
			response=client.newCall(rb.url(url).post(body).build()).execute();
		}
		//清除数据
		url=null;
		formData.clear();
		if (response!=null) {
			return response.body().string();
		}
		return null; 
	}
	
	public String put() throws IOException {
		Response response=null;
		FormBody.Builder fb=new FormBody.Builder();
		if (formData.size()==0) {
			response=client.newCall(rb.url(url).build()).execute();
		}else {
			Set<String>key=formData.keySet();
			for (String string : key) {
				fb.add(string, formData.get(string));
			}
			response=client.newCall(rb.url(url).put(fb.build()).build()).execute();
		}
		url=null;
		formData.clear();
		if (response!=null) {
			return response.body().string();
		}
		return null;
	}
	
	public String delete() throws IOException {
		Response response=null;
		FormBody.Builder fb=new FormBody.Builder();
		if (formData.size()==0) {
			response=client.newCall(rb.url(url).delete().build()).execute();
		}else {
			Set<String>key=formData.keySet();
			for (String string : key) {
				fb.add(string, formData.get(string));
			}
			response=client.newCall(rb.url(url).delete(fb.build()).build()).execute();
		}
		url=null;
		formData.clear();
		if (response!=null) {
			return response.body().string();
		}
		return null;
	}
	
	public String patch() throws IOException {
		Response response=null;
		FormBody.Builder fb=new FormBody.Builder();
		if (formData.size()==0) {
			response=client.newCall(rb.url(url).build()).execute();
		}else {
			Set<String>key=formData.keySet();
			for (String string : key) {
				fb.add(string, formData.get(string));
			}
			response=client.newCall(rb.url(url).patch(fb.build()).build()).execute();
		}
		url=null;
		formData.clear();
		if (response!=null) {
			return response.body().string();
		}
		return null;
	}
	
	
	
}


@Configuration
public class BeanConfig {

	
	@Bean
	public OkHttpClient.Builder clientBuilder() {
		OkHttpClient.Builder builder=new OkHttpClient.Builder();
		return builder;
	}
	@Bean
	public Request.Builder requestBuilder() {
		Request.Builder builder=new Request.Builder();
		builder.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36");
		return builder;
	}
	@Bean
	public OkHttpClient okHttpClient(@Autowired OkHttpClient.Builder builder) {
		return builder.build();
	}
	
	@Bean
	public OkTool okTool() {
		return new OkTool();
	}
}


@Component
public class HolidayQuery {
	@Autowired
	private OkTool ok;
	private String apiAddress="接口地址";
	//成功则返回一个 日期:类型的值 0代表
	/**
	* <p>方法名称: queryByApi</p>
	* <p>描述:查询节假日的api,可以传入一个date值</p>
	* @param date String类型 格式为yyyyMMdd 例如20180921
	* @return map 一个map key为日期 value 为0 工作日 1为周六日 2为节假日
	* @throws IOException Map<String,String> 返回类型
	*/
	public Map<String, String> queryByApi(String date) throws IOException {
		ObjectMapper objectMapper=new ObjectMapper();
		String str=ok.url(apiAddress).addFormData("date", date).get();
		HashMap<String, String> map=objectMapper.readValue(str, HashMap.class);
		if (String.valueOf(map.get("code")).equals("10000")) {
			String temp=String.valueOf(map.get("data"));
			map.clear();
			map.put(date, temp);
			return map; 
		}
		return objectMapper.readValue(str, HashMap.class);
	}
	
	/**
	* <p>方法名称: queryByApi</p>
	* <p>描述:TODO(这里用一句话描述这个方法的作用)</p>
	* @param dates 任意长度的数组 格式为yyyyMMdd 例如20180921
	* @return map 一个map key为日期 value 为0 工作日 1为周六日 2为节假日
	* @throws IOException Map<String,String> 返回类型
	*/
	public Map<String, String> queryByApi(String... dates) throws IOException {
		ObjectMapper objectMapper=new ObjectMapper();
		Map<String, String>resmap=new HashMap<>();
		for (String date : dates) {
			String jsonstr=ok.url(apiAddress).addFormData("date", date).get();
			HashMap<String, String> map=objectMapper.readValue(jsonstr, HashMap.class);
			if (String.valueOf(map.get("code")).equals("10000")) {
				String temp=String.valueOf(map.get("data"));
				resmap.put(date, temp);
			}
		}
		return resmap;
	}
	
}

后面自己去写个测试就可以了,不会的可以留言;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java 调用第三方接口通常会使用工具类 RestTemplate。RestTemplate 是 Spring 框架提供的一个用于进行 HTTP 请求的工具类。它封装了 HTTP 请求的细节,提供了简单的 API 来发送 GET、POST、PUT 和 DELETE 请求,并能够方便地处理返回的响应结果。 使用 RestTemplate 需要先导入相关的依赖包,然后在代码中创建 RestTemplate 的实例。可以通过 RestTemplate 的各种方法来构建不同类型的 HTTP 请求,比如 getForObject、postForObject 等。在方法的参数中需要指定目标接口的 URL 地址,以及可能需要传递的请求参数。 在调用三方接口时,有时需要进行身份验证,可以在请求头中添加认证信息。RestTemplate 的方法中可以通过 HttpHeaders 对象来设置请求头的相关信息。另外,还可以设置请求体的内容格式,比如 JSON、XML 等。 调用接口后,可以通过 RestTemplate 的方法获取响应结果。比如,getForObject 和 postForObject 方法会返回代表响应结果的对象(可以是字符串、对象等)。另外,还可以通过 getForEntity 和 postForEntity 方法获取完整的响应对象,包括响应头、响应体等信息。 在使用 RestTemplate 调用接口时需要注意异常处理。如果调用接口出现异常,可以通过捕获 RestTemplateException 异常来处理。另外,还可以通过设置错误处理器来处理不同类型的错误响应。 总之,RestTemplate 是一个非常实用的工具类,可以方便地进行 Java 对第三方接口调用。通过它,我们可以发送 HTTP 请求,处理响应结果,并且简化了请求的编写和异常处理的过程。使用 RestTemplate 可以提高开发效率,并且可以与不同的第三方接口进行灵活的集成。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟火里的尘埃.

有问题可以留言

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值