RestTemplate get请求远程调用

配置类

import java.util.Map;
import com.sep.common.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
@Service
public class HttpRemoteClient {

    private Logger logger = LoggerFactory.getLogger(HttpRemoteClient.class);

    @Autowired
    private RestTemplate restTemplate;

    public <T> T getForObject(String url, Map<String, ?> uriVariables, TypeReference<T> type) {
        try {
            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, null, String.class,
                    uriVariables);
            String body = exchange.getBody();
            T t = JSON.parseObject(body, type);
            logger.info("调用url={}", url);
            return t;
        } catch (Exception ex) {
            logger.info("调用url={},出错", url, ex);
            throw new ServiceException("调用出错");
        }
    }

    public <T> T postForObject(String url, String jsonParam, TypeReference<T> type, String token) {
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_JSON);
            HttpEntity<String> entity = new HttpEntity<String>(jsonParam, headers);
            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
            String body = exchange.getBody();
            T t = JSON.parseObject(body, type);
            return t;
        } catch (Exception ex) {
            logger.info("调用url={},出错", url, ex);
            throw new ServiceException("调用出错");
        }
    }
}

import java.nio.charset.StandardCharsets;
import java.util.List;

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.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;


@Configuration
public class RestTemplateConfig {
    @Bean
    RestTemplate restTemplate(ClientHttpRequestFactory requestFactory) {
        RestTemplate restTemplate = new RestTemplate(requestFactory);
        List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();

        //重新设置StringHttpMessageConverter字符集为UTF-8,解决中文乱码问题
        HttpMessageConverter<?> converterTarget = null;
        for (HttpMessageConverter<?> item : converterList) {
            if (StringHttpMessageConverter.class == item.getClass()) {
                converterTarget = item;
                break;
            }
        }
        if (null != converterTarget) {
            converterList.remove(converterTarget);
        }
        converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));

        //加入FastJson转换器
        converterList.add(new FastJsonHttpMessageConverter());
        return restTemplate;
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        //单位为ms
        //factory.setReadTimeout(20000);
        //单位为ms
        //factory.setConnectTimeout(10000);
        return factory;
    }
}

依赖

<!--fastJson-->
    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.60</version>
        </dependency>

调用方式

请求方


import com.alibaba.fastjson.TypeReference;

	//获取远程调用工具类
    @Autowired
    private HttpRemoteClient httpRemoteClient;
	//配置的请求路径
    @Value("${serviceInfo.fileService}")
    private String fileService;


    /**
     * ceshi
     */
    @GetMapping("/ceshi")
    @Anonymous
    public AjaxResult ceshi() {
        try {
            Map<String, String> map = new HashMap<>();
            //get请求  map为?拼接参数  第三个参数为反馈方返回的参数
            AjaxResult ajax = httpRemoteClient.getForObject(fileService + "/file/1136009473560694784", map, new TypeReference<AjaxResult>() {});
            System.out.println(ajax+" ==========");
            return ajax;
            }catch(Exception e){
                return AjaxResult.error(e.getMessage());
            }
    }

反馈方

    /**
     * 获取文件上传详细信息
     */
    @ApiOperation("获取文件上传详细信息")
    @GetMapping(value = "/{id}")
    @Anonymous
    public AjaxResult getInfo(@PathVariable("id") String id) {
        return AjaxResult.success(fsFileService.selectFsFileById(id));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值