spring 中拦截RestTemplate请求替换URL

开发过程用用到处理restTemplate

@Component
public class UriRequestInterceptor implements ClientHttpRequestInterceptor {

    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        // 获取原始请求的URI
        URI originalUri = request.getURI();
        // 修改或替换URL
        String url = originalUri.toString();
        int start = url.indexOf("gateway")-1;
        int end = url.indexOf("/bim-base");
        // 确保start和end位置有效
        String modifiedUrl;
        if (start != -1 && end != -1) {
            String replaceStr = url.substring(start, end);
            modifiedUrl = StringUtils.replace(originalUri.toString(), replaceStr, "");
            assert modifiedUrl != null;
            URI newUri = URI.create(modifiedUrl);
            // 创建一个新地请求对象,并设置新的URI
            HttpRequest modifiedRequest = new HttpComponentsClientHttpRequestFactory().createRequest(newUri, Objects.requireNonNull(request.getMethod()));
            // 将原请求的所有头信息复制到新请求中
            HttpHeaders headers = modifiedRequest.getHeaders();
            for (String headerName : request.getHeaders().keySet()) {
                headers.add(headerName, request.getHeaders().getFirst(headerName));
            }
            // 使用新的请求执行HTTP操作
            return execution.execute(modifiedRequest, body);
        }else {
            // 可以抛出异常或者返回一个错误的HttpResponse
            throw new IllegalArgumentException("UriRequestInterceptor-修改替换URL异常!");
        }

    }

然后配置类restTempalte添加拦截器

 RestTemplate build = new RestTemplateBuilder(restTemplateCustomizer).build();
        // 添加拦截器 针对RestTemplate请求进行拦截
        
            List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
            interceptors.add(new UriRequestInterceptor());
            build.setInterceptors(interceptors);
     

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值