我们来做一个bean然后用Autowire OkHttpClient吗

时间:2018-09-21 04:27:47

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

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的bean并自动装配

请回复!提前致谢

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

关于最初的问题。我认为您应该将其声明为四季豆。它应该简化测试。

答案 2 :(得分:0)

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

public class OkHttpFactory {

    private static OkHttpClient client = new OkHttpClient();

    public OkHttpClient getClient() {
        return client;
    }

}