最近忙,废话就不多说了,直接上代码,接口类
public interface ResetTemplateService {
/**
* 发送POST请求,请求体携带参数
* @param url
* @param params
*/
<T> T postWithBody(String url, Map<String,String> params,Class<T> tClass);
/**
* 发送POST请求,请求体携带参数,添加请求头
* @param url
* @param params
* @param headers
*/
<T> T postWithBody(String url,Map<String,String> params,Map<String,String> headers,Class<T> tClass);
/**
* 发送POST请求,FORM表单的形式
* @param url
* @param params
*/
<T> T postWithForm(String url,MultiValueMap<String,String> params,Class<T> tClass);
/**
* 发送POST请求,FORM表单的形式,添加请求头
* @param url
* @param params
* @param headers
*/
<T> T postWithForm(String url, MultiValueMap<String, String> params, Map<String,String> headers,Class<T> tClass);
/**
* 无参数POST请求
* @param url
*/
<T> T postWithForm(String url,Class<T> tClass);
/**
* 发送GET请求
* @param url
* @param params
*/
<T> T getWithParams(String url,Map<String,String> params,Class<T> tClass);
/**
* 发送GET请求
* @param url
*/
<T> T getWithNoParams(String url,Class<T> tClass);
/**
* 发送GET请求,RESTFUL
* @param url
* @param params
* @return
*/
<T> T getWithPathViable(String url,Map<String,String> params,Class<T> tClass);
实现类处理
public class ResetTemplateServiceImpl implements ResetTemplateService {
private RestTemplate restTemplate;
public void setRestTemplate(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@Override
public <T> T postWithBody(String url, Map<String, String> params,Class<T> tClass) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(JSONObject.toJSONString(params),headers);
ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST,entity,tClass);
return exchange.getBody();
}
@Override
public <T> T postWithBody(String url, Map<String, String> params, Map<String, String> newHeaders,Class<T> tClass) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
newHeaders.forEach((key,value)->{
headers.set(key,value);
});
HttpEntity<String> entity = new HttpEntity<>(JSONObject.toJSONString(params),headers);
ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST,entity,tClass);
return exchange.getBody();
}
@Override
public <T> T postWithForm(String url, MultiValueMap<String, String> params,Class<T> tClass) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(params,headers);
ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST,entity,tClass);
return exchange.getBody();
}
@Override
public <T> T postWithForm(String url, MultiValueMap<String, String> params, Map<String, String> newHeaders,Class<T> tClass) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
newHeaders.forEach((key,value)->{
headers.set(key,value);
});
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(params,headers);
ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST,entity,tClass);
return exchange.getBody();
}
@Override
public <T> T postWithForm(String url,Class<T> tClass) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
ResponseEntity<T> exchange = restTemplate.exchange(url, HttpMethod.POST,null,tClass);
return exchange.getBody();
}
@Override
public <T> T getWithParams(String url, Map<String, String> params,Class<T> tClass) {
if(params==null){
return getWithNoParams(url,tClass);
}
return restTemplate.getForObject(getParamUrl(url,params),tClass);
}
@Override
public <T> T getWithNoParams(String url,Class<T> tClass) {
return restTemplate.getForObject(url,tClass);
}
@Override
public <T> T getWithPathViable(String url, Map<String, String> params,Class<T> tClass) {
return restTemplate.getForObject(url,tClass,params);
}
/**
*
* @param url
* @param params
* @return
*/
private String getParamUrl(String url,Map<String, String> params){
Iterator<Map.Entry<String,String>> it = params.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String,String> entry= it.next();
String key = entry.getKey();
String value= entry.getValue();
if(url.indexOf("\\?")==-1){
url = url+"?"+key+"="+value;
}else{
url = url+"&"+key+"="+value;
}
}
return url;
}
}
注解实例化
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(ResetTemplateConfig.class)
public @interface EnableResetTemplate {
}
public class ResetTemplateConfig {
@Autowired
private RestTemplateBuilder builder;
// 使用RestTemplateBuilder来实例化RestTemplate对象,spring默认已经注入了RestTemplateBuilder实例
@Bean
public RestTemplate restTemplate() {
return builder.build();
}
@Bean
public ResetTemplateService resetTemplateService(){
ResetTemplateServiceImpl resetTemplateService = new ResetTemplateServiceImpl();
resetTemplateService.setRestTemplate(restTemplate());
return resetTemplateService;
}
}
在启动类上增加相应的注解,就可以全局调用和注入了