【发布时间】:2020-11-05 00:01:15
【问题描述】:
我有一个通过电话号码发送通知的 Java-Spring 库(不是应用程序)。我正在使用 Rest 模板发送 POST 请求。但是我不想创建一个新的 RestTemplate 对象,而是想使用 RestTemplateConfiguration @Configuration 来做到这一点。
- IntelliJ 版本 - 2020.2
- 春天 - 2.3.3.RELEASE
- Java - 11
第 1 期 - 当我尝试创建 RestTemplateConfiguration 类时,出现错误 -
Could not autowire. No beans of 'RestTemplateBuilder' type found.
@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。
有人可以帮我解决吗?
【问题讨论】:
标签: java spring spring-boot