P_u*_*526 5 java spring spring-boot
我有一个 Java-Spring 库(不是应用程序),它通过电话号码发送通知。我正在使用 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();
}
}
Run Code Online (Sandbox Code Playgroud)
第二个问题如果我创建 RestTemplateBuilder 的新对象,它不会给出错误,但这不是我希望此类的行为方式。另外,在类(下面提到) SamplePhoneNumbers.java 中,这似乎不起作用,我尝试使用RestTemplate restTemplate. 它即将变为空。
@Configuration
public class RestTemplateConfiguration {
@Bean
public RestTemplate restTemplate() {
RestTemplateBuilder builder = new RestTemplateBuilder;
return builder.build();
}
}
Run Code Online (Sandbox Code Playgroud)
这是发送通知的类,我正在尝试使用 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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
第三个问题:有什么方法可以摆脱 getInstance() 方法,这样我就不必处理单例逻辑?如果我可以将类创建为 bean,我想这应该可以工作,但我不确定在这种情况下如何实现这一点。
由于这是一个库,因此它没有 main 方法,也没有 @SpringBootapplicationContext。
有人可以帮我解决问题吗?
小智 7
我在运行 Junit 测试用例时也遇到了类似的错误,并通过添加一个 bean 解决了它 -
@Bean
public RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder();
}
Run Code Online (Sandbox Code Playgroud)
您想在 Spring Boot 应用程序中调用 Java-Spring LIBRARY 吗?如果是这样,您应该在 Spring Boot 应用程序的 main 方法中添加 @ComponentScan,如下所示。
pacakge com.prod
// for instance, Java-Spring LIRARY package is com.third
@SpringBootApplication
@ComponentScan(basePackages={"com.prod","com.third"})
public class Application {
Run Code Online (Sandbox Code Playgroud)
那么你应该执行以下操作:
@Configuration
public class RestTemplateConfiguration {
@Bean(name="myRestTemplate")
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@Slf4j
@Component
public class SamplePhoneNumbers implements SampleClassStratergy {
@Autowired
@Qualifier("myRestTemplate")
RestTemplate restTemplate;
@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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8183 次 |
| 最近记录: |