java - 无法自动接线。找不到 'RestTemplateBuilder' 类型的 bean

标签 java spring spring-boot

我有一个 Java-Spring 库(不是应用程序),它通过电话号码发送通知。我正在使用 Rest 模板发送 POST 请求。但是我不想创建 RestTemplate 的新对象,而是想使用 RestTemplateConfiguration @Configuration 来这样做。

  1. IntelliJ 版本 - 2020.2
  2. Spring - 2.3.3.RELEASE
  3. Java - 11

第 1 期 - 当我尝试创建 RestTemplateConfiguration 类时,出现错误 - 无法 Autowiring 。未找到“RestTemplateBuilder”类型的 bean。

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

第 2 期 如果我创建 RestTemplateBuilder 的新对象,它不会给出错误,但这不是我希望这个类的行为方式。此外,在类(如下所述)SamplePhoneNumbers.java 中,这似乎不起作用,我尝试使用 RestTemplate restTemplate。它以 null 的形式出现。

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

这是发送通知的类,也是我尝试使用 Rest 模板的地方。

@Slf4j
public class SamplePhoneNumbers implements SampleClassStratergy {

    RestTemplate restTemplate;
    private static SamplePhoneNumbers samplePhoneNumbers = null;
    private String phoneNumbersNotificationServiceURL = Enums.NotificationURL.enum_value + Enums.PhoneNumberApi.enum_value;

    SamplePhoneNumbers() {
        this.restTemplate = new RestTemplate();
    }

    public static SamplePhoneNumbers getInstance() {
        if(samplePhoneNumbers ==null) {
            samplePhoneNumbers = new SamplePhoneNumbers();
        }
        return samplePhoneNumbers;
    }

    @Async
    public void sendNotification(String title, String message, List<String> listOfPhoneNumbers) {
        SmsMessage smsMessage= new SmsMessage(title, message, listOfPhoneNumbers, Collections.emptyList(), Collections.emptyList());

        try {
            HttpEntity<SmsMessage> newRequest = new HttpEntity<>(smsMessage);
            restTemplate.postForObject(phoneNumbersNotificationServiceURL, newRequest, String.class);
            log.info("Notification sent via phone number.");
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }
}

第三期:有什么办法可以摆脱 getInstance() 方法,这样我就不必处理单例逻辑了?如果我可以将类创建为 bean,我猜应该可以,但我不确定在这种情况下如何实现。

由于这是一个库,它没有 main 方法,也没有 @SpringBootapplicationContext。

有人可以帮我解决吗?

最佳答案

我在运行 Junit 测试用例时也遇到了类似的错误,并通过添加一个 bean 来解决它 -

@Bean
public RestTemplateBuilder restTemplateBuilder() {
    return new RestTemplateBuilder();
}

关于java - 无法自动接线。找不到 'RestTemplateBuilder' 类型的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64689386/

相关文章:

java - 如何在 Java RegEx 中匹配组中的转义字符

java - JOptionPane.showMessageDialog 线程安全吗?

spring - 如何将 IoC 注入(inject) Kotlin 顶级函数?我什至使用 IoC 容器吗?

java - 阻止在控制台上打印 jsf 验证消息

java - 通过命令行参数更改默认的 Ant 目标

java - 通过postman测试上传端点

spring boot postgres : FATAL: sorry, 已经有太多客户

java - 来自可迭代的通量如何处理背压

spring - 错误处理 Spring JdbcTemplate batchUpdate

java - 获取 java.lang.IllegalStateException : Neither BindingResult nor plain target object for bean name 'command' available as request attribute