如何在 Spring 引导中自动装配 OkHttpClient bean?
How to Autowire a OkHttpClient bean in Spring Boot?
我想在我的控制器 class 中 autowire
OkHttpClient
的一个实例。我创建了一个 OkHttpClientFactory
class 并在其构造函数中将其标记为 Bean
。我将其作为 Autowired
包含在 Controller class 中。但是,我 运行 进入以下问题 -
豆子-
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import okhttp3.OkHttpClient;
@Configuration
public class OkHttpClientFactory {
@Bean
public OkHttpClient OkHttpClientFactory() {
return new OkHttpClient();
}
}
控制器-
import java.io.IOException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.sap.lmc.beans.OkHttpClientFactory;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@RestController
@RequestMapping("/recast")
public class Test {
@Autowired
private OkHttpClientFactory client;
private String url = "https://example.com/";
@GetMapping(path="/fetchResponse", produces="application/json")
public String getRecastReponse() {
Request request = new Request.Builder().url(url).build();
try {
Response response = client.newCall(request).execute();
JSONObject json = new JSONObject();
json.put("conversation",response.body().string());
return json.toString();
} catch (IOException e) {
return e.getMessage().toString();
}
}
}
以下错误结果 -
java.lang.Error: Unresolved compilation problem:
The method newCall(Request) is undefined for the type OkHttpClientFactory
Autowired
OkHttpClientFactory
实例实际上返回的不是 OkHttpClient
类型的对象。那为什么方法newCall()
不适用呢?
在您的控制器中更改此 @Autowired private OkHttpClientFactory client;
。
到
@Autowired private OkHttpClient client;
您想@autowire 到 OKHttpClient
而不是 'Factory' class.
您的工厂是一个配置 class 因为您用 @Configuration
注释对其进行了注释。在您的控制器中,不要注入配置 bean,而是注入其中配置的 bean。此 bean 将在 spring 上下文中可用并且对 @Autowire
.
有效
class OkHttpClientFactory
没有方法 newCall(Request)
正如你所看到的。
您应该将控制器中的字段 private OkHttpClientFactory client;
更改为 private OkHttpClient client;
并让 spring 按类型注入 bean。
我想在我的控制器 class 中 autowire
OkHttpClient
的一个实例。我创建了一个 OkHttpClientFactory
class 并在其构造函数中将其标记为 Bean
。我将其作为 Autowired
包含在 Controller class 中。但是,我 运行 进入以下问题 -
豆子-
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import okhttp3.OkHttpClient;
@Configuration
public class OkHttpClientFactory {
@Bean
public OkHttpClient OkHttpClientFactory() {
return new OkHttpClient();
}
}
控制器-
import java.io.IOException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.sap.lmc.beans.OkHttpClientFactory;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@RestController
@RequestMapping("/recast")
public class Test {
@Autowired
private OkHttpClientFactory client;
private String url = "https://example.com/";
@GetMapping(path="/fetchResponse", produces="application/json")
public String getRecastReponse() {
Request request = new Request.Builder().url(url).build();
try {
Response response = client.newCall(request).execute();
JSONObject json = new JSONObject();
json.put("conversation",response.body().string());
return json.toString();
} catch (IOException e) {
return e.getMessage().toString();
}
}
}
以下错误结果 -
java.lang.Error: Unresolved compilation problem:
The method newCall(Request) is undefined for the type OkHttpClientFactory
Autowired
OkHttpClientFactory
实例实际上返回的不是 OkHttpClient
类型的对象。那为什么方法newCall()
不适用呢?
在您的控制器中更改此 @Autowired private OkHttpClientFactory client;
。
到
@Autowired private OkHttpClient client;
您想@autowire 到 OKHttpClient
而不是 'Factory' class.
您的工厂是一个配置 class 因为您用 @Configuration
注释对其进行了注释。在您的控制器中,不要注入配置 bean,而是注入其中配置的 bean。此 bean 将在 spring 上下文中可用并且对 @Autowire
.
class OkHttpClientFactory
没有方法 newCall(Request)
正如你所看到的。
您应该将控制器中的字段 private OkHttpClientFactory client;
更改为 private OkHttpClient client;
并让 spring 按类型注入 bean。