我有一个Java库(不是应用程序),它通过电话号码发送通知。我使用Rest模板发送POST请求。但是,我不想创建RestTemplate的新对象,而是使用RestTemplateConfiguration @Configuration来实现。
第一期-当我试图创建一个RestTemplateConfiguration类时,我得到了错误- Could not autowire. No beans of 'RestTemplateBuilder' type found.
@Configuration
public class RestTemplateConfiguration {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
}
第二期如果我创建了一个新的RestTemplateBuilder对象,它不会给出错误,但这不是我希望这个类的行为方式。而且,当在类(下面提到) SamplePhoneNumbers.java中,我尝试使用RestTemplate restTemplate
时,这似乎不起作用。它将以空的形式出现。
@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());
}
}
}
第3期:有没有办法摆脱getInstance()方法,这样我就不必处理单例逻辑了?如果我可以以bean的形式创建类,我想这应该是可行的,但我不确定如何在这种情况下实现这一点。
因为这是一个库,所以没有主方法,也没有@SpringBootapplicationContext。
有人能帮我解决这个问题吗?
发布于 2021-07-11 12:18:49
在运行Junit测试用例时,我也得到了类似的错误,并通过添加以下bean来解决-
@Bean
public RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder();
}
https://stackoverflow.com/questions/64689386
复制相似问题