open feign

发布时间 2023-07-10 16:56:17作者: fight139

okhttp

public ApiResult exchange(Class clazz, Method method)
        throws Exception {
        FeignClient feignClient = (FeignClient)clazz.getAnnotation(FeignClient.class);
        String serviceName = feignClient.name();
        String path = feignClient.path();

        String methodUrl = "";
        GetMapping getMapping = method.getAnnotation(GetMapping.class);
        PostMapping postMapping = method.getAnnotation(PostMapping.class);
        DeleteMapping deleteMapping = method.getAnnotation(DeleteMapping.class);
        PutMapping putMapping = method.getAnnotation(PutMapping.class);

        if (getMapping != null) {
            methodUrl = getMapping.value()[0];
        }
        if (postMapping != null) {
            methodUrl = postMapping.value()[0];
        }
        if (deleteMapping != null) {
            methodUrl = deleteMapping.value()[0];
        }
        if (putMapping != null) {
            methodUrl = putMapping.value()[0];
        }
        if (StringUtil.isEmpty(methodUrl)) {
            return null;
        }

        OkHttpClient client = new OkHttpClient.Builder()
            .connectTimeout(5000, TimeUnit.SECONDS)
            .readTimeout(10, TimeUnit.SECONDS)
            .writeTimeout(500, TimeUnit.SECONDS)
            .build();
        Request.Builder requestBuilder = new Request.Builder().url(getUrl(serviceName,
            "/" + path.replaceAll("/", "") + "/" + methodUrl.replaceAll("/", "")));

        doHeaders(requestBuilder);
        Response response = client.newCall(requestBuilder.build()).execute();
        if (response.isSuccessful()) {
            return parseApiResult(response.body().string());
        }

        return null;
    }

    private void doHeaders(Request.Builder builder)
        throws Exception {
        List<Header> headers = new ArrayList<>();
        headers.add(new Header("Authorization", this.getAuthorization()));
        if (!CollectionUtil.isEmpty(headers)) {
            Headers.Builder headerBuilder = new Headers.Builder();
            for (Header header : headers) {
                headerBuilder.add(header.getName(), header.getValue());
            }
            builder.headers(headerBuilder.build());
        }
    }