RestTemplate调用第三方接口实现方式


package com.common.restTemplate;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

/**
 * 封装RestTemplate  请求方式service
 */
@Service("RestTemplateService")
public class RestTemplateService {
    
    @Autowired
    private RestTemplate restTemplate;
    //url(get请求  可拼接路径参数)
    public  String  getForObject(String url){
        String message = restTemplate.getForObject(url, String.class); 
        return message;
    }
    //map传参  请求方式get
    public  String  getForObject(String url,Map params){
        String message= restTemplate.getForObject(url, String.class, params); 
        return message;
    }
    /*map , token传参  请求方式get
     *1 请求的url,其中{}为参数占位符,分别对应请求参数map中的key.
     *2请求方法.
     *3请求实体,可以封装请求体和请求头.
     *4返回体转换的类型,这里返回json,将其指定为Map.
     *5请求参数map. 
     * 
     */    
    
    @SuppressWarnings("rawtypes")
    public  ResponseEntity<Map>  getByHeaderMap(String url,String token,Map params){
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", token);
        @SuppressWarnings({ "unchecked" })
        ResponseEntity<Map> response = restTemplate.exchange(
                url,
                HttpMethod.GET,
                new HttpEntity<String>(headers),
                Map.class,
                params);
        return response;
    }    
    //url(post请求  可拼接路径参数)
    public  String  postForObject(String url){
        ResponseEntity<String> message = restTemplate.postForEntity(url, null, String.class);
        return message.getBody();
    }
    //url(请求路径)  entityJson(传递参数json串)   post传参     此请求方式可用于列表条件查询   添加修改方法(多参数传值)
    public  String  postForObject(String url,String entityJson){
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        HttpEntity<String> formEntity = new HttpEntity<String>(entityJson, headers);
        String result=restTemplate.postForObject(url,formEntity,String.class); 
        return result;
    }
    public  String  postForObject(String url,HttpServletRequest request,String entityJson){
        HttpHeaders headers = new HttpHeaders();
        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        headers.add("token", request.getHeader("token"));
        headers.add("uid", request.getHeader("uid"));
        headers.add("userid", request.getHeader("userid"));
        
        HttpEntity<String> formEntity = new HttpEntity<String>(entityJson, headers);
        String result=restTemplate.postForObject(url,formEntity,String.class); 
        return result;
    }
    //url(请求路径+路径传参)
    public void delete(String url){
        restTemplate.delete(url); 
    }    
    
}

接口配置

package com.common.restTemplate;

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.web.client.RestTemplate;

/**
 * RestTemplate配置类
 */
@Configuration
public class RestTemplateConfig {
    
    
    //最好是用不注释的方法,在注入的同时设置连接时间,这种注释的也可以,但是没有设置超时时间
    /*@Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder){
        return builder.build();
    }*/
 
    @Bean
    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
        return new RestTemplate(factory);
    }
 
    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(50000);//单位为ms
        factory.setConnectTimeout(50000);//单位为ms
        return factory;
    }
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM