ResetTemplate封裝

最近忙,廢話就不多說了,直接上代碼,接口類

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;
    }

}

在啓動類上增加相應的註解,就可以全局調用和注入了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章