springboot集成RestTemplate

//实现restTemplate接口
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
RestTemplate restTemplate = restTemplateBuilder
.setReadTimeout(Duration.ofSeconds(6))
.setConnectTimeout(Duration.ofSeconds(3))
.build();
List<HttpMessageConverter<?>> list = restTemplate.getMessageConverters();
for (HttpMessageConverter<?> httpMessageConverter : list) {
if (httpMessageConverter instanceof StringHttpMessageConverter) {
((StringHttpMessageConverter) httpMessageConverter).setDefaultCharset(CharsetUtil.charset(“UTF-8”));
break;
}
}
return restTemplate;
}

}

//工具类
@Component
public class RestTemplateUtil {

@Autowired
private RestTemplate restTemplate;

private final static Logger logger = LoggerFactory.getLogger(RestTemplateUtil.class);

/**
 * restTemplate发送get请求,无参数
 * @param url 请求地址
 * @param clazz 返回对象类型
 * @return
 */
public <T> T httpGet(String url,Class<T> clazz){
    logger.info("httpget reqquesturl is {}",url);
    ResponseEntity<T> response  =restTemplate.getForEntity(url, clazz);
    logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
    return response.getBody();
}

/**
 * restTemplate发送get请求,参数是key value形式
 * @param url 请求地址
 * @param reqParmas  请求参数的key和value
 * @param clazz 返回对象类型
 * @return
 */
public <T> T httpGet(String url,Map<String,Object> reqParmas,Class<T> clazz){
    logger.info("httpget reqquesturl is {}",url);
    ResponseEntity<T> response  =restTemplate.getForEntity(url,  clazz);
    logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
    return response.getBody();
}

/**
 * restTemplate发送get请求,传参形式为指定占位符
 * @param url 示例  http://HELLO-SERVICE/sayhello?name={1}
 * @param uriVariables "张三"
 * @param clazz 返回对象类型
 * @return
 */
public <T> T  httpGet(String url,Class<T> clazz,Object... uriVariables){
    logger.info("httpget reqquesturl is {}",url);
    ResponseEntity<T> response =restTemplate.getForEntity(url, clazz,uriVariables);
    logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
    return response.getBody();
}

/**
 * restTemplate发送get请求,获取地址下载流
 * @param url 示例 http://10.182.243.155:7003/ImgQuery/imaget/202002/04/26/C02/C020400/NJ/NW00C020400001587886324742.PDF
 * @return
 */
public InputStream httpGet(String url){
    logger.info("httpget reqquesturl is {}",url);
    HttpHeaders headers = new HttpHeaders();
    List list = new ArrayList<>();
    list.add(MediaType.valueOf("application/pdf"));
    headers.setAccept(list);
    ResponseEntity<byte[]> response = restTemplate.exchange(
            url,
            HttpMethod.GET,
            new HttpEntity<byte[]>(headers),
            byte[].class);
    byte[] result = response.getBody();

    return new ByteArrayInputStream(result);
}


/**
 * restTemplate 发送自定义header的请求,,默认已设置contentType:application/json;charset=UTF-8
 * @param url 请求地址
 * @param header header的key&value
 * @param reqJson 请求对象json
 * @param clazz 返回对象类型
 * @param <T>
 * @return
 */
public <T> T httpPost(String url, Map<String,String> header,String reqJson,Class<T> clazz){
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
    if(!CollectionUtils.isEmpty(header)){
        for(String key:header.keySet()){
            headers.set(key, header.get(key));
        }
    }
    HttpEntity<String> entity = new HttpEntity<String>(reqJson, headers);
    logger.info("httppost request begin ,url is {},header is {},requestjson is {}",new Object[]{url,JsonUtil.toJson(header),reqJson});
    ResponseEntity<T> response =restTemplate.exchange(url, HttpMethod.POST, entity, clazz);
    logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
    return response.getBody();
}


/**
 *restTemplate 发送post请求
 * @param url
 * @param reqJson
 * @param clazz 返回对象类型
 * @return
 */
public <T> T httpPost(String url, String reqJson,Class<T> clazz){
    logger.info("httppost request begin ,url is {},requestjson is {}",new Object[]{url,reqJson});
    ResponseEntity<T> response =restTemplate.postForEntity(url, reqJson, clazz);
    logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
    return response.getBody();
}

/**
 * restTemplate 发送post请求form
 * @param url
 * @param map
 * @param clazz
 * @param <T>
 * @return
 */
public <T> T httpPostForm(String url, MultiValueMap<String, String> map, Class<T> clazz){
    logger.info("httppost request begin ,url is {},requestjson is {}",new Object[]{url,JsonUtil.toJson(map)});
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<MultiValueMap<String, String>>(map, headers);
    ResponseEntity<T> response = restTemplate.postForEntity( url, request , clazz );
    logger.info("httpstatus is {},返回结果是{}",new Object[]{response.getStatusCode(),JsonUtil.toJson(response.getBody())});
    return response.getBody();
}

}

//使用例
post:

        Map<String, String> result = restTemplateUtil.httpPost(url, null, JsonUtil.toJson(policyDTO), HashMap.class);
        Object object = restTemplateUtil.httpPost(mockURL + url, new HashMap(), param, Object.class);

httpPostForm:

	MultiValueMap<String, String> params= new 
	LinkedMultiValueMap<String, String>();
    params.add("secretContent", message);
    params.add("empNo", benefitRequest.getEmpInfo().getEmpNo());
    String url = propertiesService.findOneByKey("Properties", "benefit.background");
    return restTemplateUtil.httpPostForm(url, params, BenefitResponse.class);

httpGet:

	List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
    list.add(new BasicNameValuePair("MainIndex", mainIndex));
    String params = EntityUtils.toString(new UrlEncodedFormEntity(list, Consts.UTF_8));
    String redirecturlNew = obUrl + "?" + params;
    String xml = restTemplateUtil.httpGet(redirecturlNew, String.class);

猜你喜欢

转载自blog.csdn.net/ssssyyyyyy/article/details/107459798