java - org.springframework.web.client.RestTemplate 期望被声明为@Bean 和普通的@Autowired 抛出错误
问题描述
我在我的@RestController
类“personController”中需要一个 RestTemplate 对象,所以我像下面这样声明它。
@Autowired
private RestTemplate restTemplate;
当我尝试使用它时,我得到以下错误 com.example.demo.api.PersonController 中的字段 restTemplate 需要一个org.springframework.web.client.RestTemplate
找不到类型的 bean。考虑在配置中定义一个 bean 类型org.springframework.web.client.RestTemplate
。
为了克服这个错误,我@Bean
在 config.java 文件中声明了一个像下面这样的 for restemplate,它工作正常并且没有抛出任何错误。
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
return restTemplate;
}
我在“personService”类中使用一个com.fasterxml.jackson.databind.ObjectMapper
对象,我像下面这样自动连接它。@Service
@Autowired
private ObjectMapper objectMapper;
我能够使用 objectmapper 而不为它声明任何 bean 并且它工作正常。我想明白
- 为什么 objectmapper 在没有 bean 的情况下工作,但 resttemplate 在没有 bean 的情况下无法工作并期望声明一个 bean?
- 什么时候创建一个bean,什么时候简单地使用plain
@Autowired
without bean?我怎样才能通过查看它来找到它?
解决方案
正如春季文档中提到的那样。 https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-resttemplate.html
如果需要从应用程序调用远程 REST 服务,可以使用 Spring Framework 的 RestTemplate 类。由于 RestTemplate 实例通常需要在使用前进行自定义,因此 Spring Boot 不提供任何单个自动配置的 RestTemplate bean。但是,它确实会自动配置一个 RestTemplateBuilder,它可用于在需要时创建 RestTemplate 实例。自动配置的 RestTemplateBuilder 确保将合理的 HttpMessageConverters 应用于 RestTemplate 实例。
推荐阅读
- java - 在实现接口的函数之间共享变量
- javascript - 更新 angular-devkit 并失败:Microsoft.AspNetCore.SpaServices[0]
- json - Javascript Base64 解码到无效的 JSON 输出
- c# - 扩展 IEnumerable 的 Select 以将源包含在选择器中
- php - 爆炸函数在数组的第 0 个索引处返回空值
- python - 尽管已安装模块,但 jupyter 笔记本中未定义 skimage
- node.js - server.use(express.static(path.join(__dirname, 'public'))); 不工作
- javascript - React - 列表中的每个孩子都应该有一个唯一的“关键”道具
- joomla - 类别上的 Joomla 斜杠
- c# - 如何检查字符串是否不等于多个字符串