【问题标题】:Shall we make a bean and Autowire OkHttpClient我们要不要做一个 bean 和 Autowire OkHttpClient
【发布时间】:2019-02-25 10:39:09
【问题描述】:
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "q=609&client=122&layer=explore&key=w3S4BEmDKd8Q3VCCO2OZTnI8sAQxIFwA&name=utkarsh%20sharma&password=utk&phone=1111111112");
Request request = new Request.Builder()
  .url("http://explore-uat.mapmyindia.in/explore-api/v1.3/")
  .post(body)
  .addHeader("Content-Type", "application/x-www-form-urlencoded")
  .addHeader("Cache-Control", "no-cache")
  .addHeader("Postman-Token", "44666246-b697-488f-9410-df09f7faa53a")
  .build();

Response response = client.newCall(request).execute();

我正在使用此代码向 API 发出发布请求。 我在课堂上多次使用它。 是否可以在我的班级中制作 OKhttpClient 和 autowire 的 bean

请回复!!谢谢提前

【问题讨论】:

    标签: spring spring-mvc spring-boot spring-data


    【解决方案1】:

    您可以通过在配置中的某处声明一个 bean 来做到这一点:

    @Configuration
    public class HttpClientConfiguration {
    
        @Bean
        public OkHttpClient httpClient() {
            return new OkHttpClient();
        }
    }
    

    另外,如果没有另外声明,默认情况下每个 spring bean 都是一个单例:https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html

    关于最初的问题。我认为您应该将其声明为spring bean。它应该可以简化测试。

    【讨论】:

      【解决方案2】:

      我会将它声明为 Spring bean,因为与 Singleton 解决方案相比,这使得测试更加容易。但是,由于您使用的是 Spring boot,您也可以只使用 RestTemplate,如下所述:https://spring.io/guides/gs/consuming-rest/

      【讨论】:

      • 另外,我认为您可以告诉 RestTemplate 在后台使用 OkHttpClient - 如果您正在使用任何池设置或其他设置,并且需要选择这个特定的客户端。
      • 基本上是这样,但是你只能使用实现org.apache.http.client.HttpClient的http客户端,我认为OkHttpClient没有这样做
      • 嗯,有这个org.springframework.http.client.OkHttp3ClientHttpRequestFactory,是RestTemplate使用的;我猜,你只需要将 OkHttpclient 包含在你的 maven 依赖项中,它就会被选中。根据“org.apache ...”:绝对不是这样,这一切都包裹在springs自己的ClientHttpRequest中。
      • 啊,对不起,我没有看工厂本身。那你当然是对的
      【解决方案3】:

      如下定义的单例就足够了:

      public class OkHttpFactory {
      
          private static OkHttpClient client = new OkHttpClient();
      
          public OkHttpClient getClient() {
              return client;
          }
      
      }
      

      【讨论】:

      • 你的单身人士简单而渴望。如果 OkkHttClient 的实例化很重,请尽快创建它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 2015-08-28
      • 2019-12-23
      • 2014-07-06
      • 1970-01-01
      • 2021-02-13
      相关资源
      最近更新 更多