Wie zu Erstellen oder zu konfigurieren, Rest-Vorlage mit @Bean in Spring Boot
Möchte ich definieren RestTemplate
als application-bean mit @Bean
Anmerkung in mein configuration-Klasse, die in einer spring-boot-Anwendung.
Rufe ich 4 von rest-Diensten in verschiedenen Orten in meiner Anwendung fließen. Zurzeit bin ich schaffen RestTemplate
jeder Zeit jeden Wunsch. Gibt es eine Möglichkeit, kann ich definieren, die als application-bean mit @Bean
und Spritzen, die mit @Autowired
?
Hauptgrund für diese Frage ist, kann ich in der Lage zu definieren RestTemplate
mit @Bean
aber wenn ich es injizieren mit @Autowired
ich bin verlieren alle angegebenen interceptors (Abfangjäger sind nicht immer genannt.)
Configuration-Klasse
@Bean(name = "appRestClient")
public RestTemplate getRestClient() {
RestTemplate restClient = new RestTemplate(
new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add(new RestServiceLoggingInterceptor());
restClient.setInterceptors(interceptors);
return restClient;
}
Service-Klasse
public class MyServiceClass {
@Autowired
private RestTemplate appRestClient;
public String callRestService() {
//create uri, method response objects
String restResp = appRestClient.getForObject(uri, method, response);
//do something with the restResp
//return String
}
}
Es scheint, mein Interceptors
sind nicht immer genannt, bei der alle mit dieser Konfiguration. Aber RestTemplate
ist in der Lage, um einen Anruf zu tätigen, um den REST-service und eine Antwort bekommen.
- Sind Sie sicher, dass Sie die Injektion der gleichen
RestTemplate
Beispiel könnten Sie Kommissionierung bis einige andere Bohne? Versuchen Sie@Qualifier("appRestClient")
ausorg.springframework.beans.factory.annotation.Qualifier
neben Ihrem@Autowired
annotation. - vielen Dank für Ihre Eingabe daniel.Wenn ich versuchte, mit @Qualifier Abfangjäger sind nicht immer abgeholt.Ich glaube, ich bin hier etwas fehlt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Urteilen, bilden die Namen der interceptor, ich vermute, Sie machen einige der Protokollierung in it? Man könnte verpasste logging-level configuration. Ich erstellte eine kleine Anwendung, um zu überprüfen, das Wetter Ihre Konfiguration funktioniert, mit
1.3.6.RELEASE
version.In dieser Klasse definiere ich das
RestTemplate
bean und den interceptor mit Protokollierung.Für die Anmeldung an die Arbeit, ich habe auch die richtigen debug-level in
application.properties
.Dann Erzeuge ich einen service, wo ich Spritzen diese
RestTemplate
.- Und auch einen Endpunkt, dieses heraus zu testen.
Durch ausführen einer
GET
Anfragehttp://localhost:8080/test
sollte ich erwarten, um die Zeichenfolgehello!
immer gedruckt (der service macht einen Aufrufhttp://localhost:8080
gibthello!
und sendet diese zurück zu mir). Die interceptor mit logger druckt auch ausIntercepting...
in der Konsole.Edd-Lösung wird nicht funktionieren, wenn man mit Spring Boot-1.4.0 oder höher. Verwenden Sie RestTemplateBuilder, damit es funktioniert. Hier ist das Beispiel
Nun können Sie autowire die Bohne in Ihrer service-Klasse
Hoffe, das hilft