当前位置: 首页 > 知识库问答 >
问题:

Spring启动错误@Autowired RestTemplateBuilder with junit

文喜
2023-03-14

尝试使用RestTemplateBuilder在Spring Boot 2.1.4中@Autow的RestTemboard。当我运行jUnit测试时,我在尝试自动装配RestTemboard时收到错误。

我在这里看到了:如何使用注释自动连接RestTemplate似乎RestTemplateBuilder更好,所以我想使用它。

这是配置文件:

@Configuration
public class Beans {
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        return builder.build();
    }
}

这是测试课程:

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = Beans.class)
public class AppTest extends TestCase {
    @Autowired
    private RestTemplate restTemplate;
}

错误是:

APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method restTemplate in beanDeclerations.Beans required a bean of type 'org.springframework.boot.web.client.RestTemplateBuilder' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.springframework.boot.web.client.RestTemplateBuilder' in your configuration.

我编辑了其他自动装配的工作。我在这里错过了什么?在网上搜索后,我发现Spring自动连接RestTemplateBuilder,为什么这里没有这样做?

编辑:我最终使用了@RestClientTest(),现在不得不将RestTemplateBuilder Bean移动到主类中,稍后我会将其移动到另一个地方。谢谢你的帮助。

共有2个答案

蒋斯伯
2023-03-14

我有同样的问题(在Spring Boot 2.5.5应用程序中)。

为了解决这个问题,我必须在我的测试类上添加@AutoConfigreWebClient。

所以我的测试是这样的:

@AutoConfigureWebClient
@WebMvcTest(controllers = TeamController.class)
public class TeamControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private FooService fooService;

    @Test
    public void findAllFoos() throws Exception {
        mockMvc.perform(get("/foos"))
                .andExpect(status().isOk());
    }
}

但我在某个地方读到,它可能被认为是一个应该由Spring团队修复的bug(也许这个注释会直接添加到@WebMvcTest?)。

我这样认为:测试的启动和停止速度比使用@SpringBootTest时快(因为最后一个测试会使应用程序完全启动)。

欲了解更多信息:https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/client/AutoConfigureWebClient.html

苍德寿
2023-03-14

RestTemplateBuilder应通过自动配置提供(请参阅:https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/client/RestTemplateAutoConfiguration.java).我认为由于@ContextConfiguration,这个配置丢失了。你有一些可能性。尝试将RestTemplateBuilder的自动配置添加到ContextConfiguration中。第二种方法是进行测试配置,创建自己的RestTemplateBuilder或直接创建RestTemplate。第三个问题是不要注入RestTemplate——在测试中手工构建它。您还可以删除@ContextConfiguration注释,但这将导致一个测试,该测试将加载您在项目中定义的每个配置。

还有一个RestTestTemplate(https://www.baeldung.com/spring-boot-testresttemplate)它是为测试而设计的。

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = {TestConfig.class, RestTemplateAutoConfiguration.class})
public class SandboxApplicationTests {

    @Autowired
    RestTemplate restTemplate;

    @Test
    public void contextLoads() {
    }

}

上面的片段对我很有用。如果没有ContextConfiguration中的RestTemplateAutoConfiguration,则无法创建RestTemplate,因为缺少RestTemplateBuilder Bean

 类似资料:
  • 我在启动spring boot应用程序时遇到以下错误。这是我的第一个spring boot项目。因此,我不确定错误以及如何修复它。 申请启动失败 描述: 配置为侦听端口8080的Tomcat连接器无法启动。端口可能已在使用中,或者连接器可能配置错误。 行动: 验证连接器的配置,识别并停止在端口8080上侦听的任何进程,或者将此应用程序配置为在另一个端口上侦听。

  • 项目Spring引导1..5.7版本。我正在使用Intellij IDEA 2017.2.4和gradle进行依赖性管理。当我构建项目时,它成功构建,没有错误。当我用bootRun gradle任务运行应用程序时,它显示以下错误。

  • 以下错误显示在Eclipse中 原因:org。springframework。邮政MailSendException:邮件服务器连接失败;嵌套的异常是javax。邮政MessaginException:无法连接到SMTP主机:SMTP。gmail。com,端口:25; 应用程序属性: 我尝试了一切:停用防病毒,启用不太安全的端口更改为465或25,但没有结果。

  • 我正在构建一个spring boot应用程序,在从eclipse运行项目的同时,它可以完美地工作,页面加载正常。但当我构建maven并生成JAR文件并尝试执行时,JSP页面没有加载,它显示了白标签错误。 应用属性 文件夹结构 波姆。xml 这个项目pom xml与所有的depeden Spring启动类文件

  • 我使用spring初始化工具来生成一些工作骨架,我使用MAVEN项目的默认值 https://start.spring.io/ 当我运行(在项目中没有做任何更改)时,我得到了以下错误,知道如何克服它吗? 使现代化 这是pom。xml文件,我没有更改任何内容。。。 更新2

  • 我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包 我想将所有应用程序错误重定向到一个公共页面。我已经创建了这个控制器: 我的配置文件: 以及错误模板 但结果是: 这就是提出的解决方案的结果: 检查属性,这些是属性,消息就在那里:

  • 2020-05-09 17:28:38.521信息21308---[restartedMain]O.A.C.C.C.[Tomcat].[localhost].[/]:初始化Spring embedded WebApplicationContext 2020-05-09 17:28:38.527信息21308--[restartedMain]O.s.Web.context.ContextLoader

  • 我编译我的项目与,并失败与。 “详细信息”命令: 获取jar文件通过在源项目中运行 这里是源代码项目 这是目标项目pom。xml