0
votes

org.springframework.web.Client.RestTemplate devrait être déclaré @Bean and plaine @Autowired jette une erreur

J'ai besoin d'un objet de plate-forme dans mon @rescontroller code> classe "personController" alors je l'ai dit comme ci-dessous. XXX PRE>

Quand j'ai essayé de l'utiliser im obtenir le ci-dessous erreur Field Resttemplate dans com.Example.demo.api.personController nécessitait un haricot de type org.springframework.web.client.Resttemplate code> qui n'a pas pu être trouvé. Envisagez de définir un haricot de type org.springframework.web.client.Resttemplate code> dans votre configuration. P>

Pour surmonter l'erreur, je déclare un @bean code> Pour le restemplal comme ci-dessous dans un fichier CONFIG.JAVA et sa fonctionnement bien et ne jetez aucune erreur. p> xxx pré>

J'utilise un com.fasterxml.jackson.databind. ObjectMapper code> objet dans @service code> Classe "Perservice" et je l'ai modifiée comme ci-dessous. P>

@Autowired
private ObjectMapper objectMapper;


0 commentaires

5 Réponses :


0
votes

ObjectMapper fonctionne car il y a un autre code 3ème parti (I.e. Jackson) qui utilise ce haricot (et il est configuré par eux). Vous en profitez simplement en la modifiant à vos propres haricots.

Resttemplate ne sont pas fournis comme un haricot par une tierce partie dans votre code Code (Cela pourrait passer par une dépendance). Donc, c'est à vous de créer un haricot, si vous voulez.

Vous ne pouvez pas supposer que rien n'est un haricot à moins que vous sachiez. La documentation est donc votre première place à regarder.


1 commentaires

Merci. J'ai trouvé "org.springframework.boot.autoconfigure.jackson.jacksonautoc erguration.conditi oneonClass = com.fast erxml.jackson.databi nd.Ockjackson.databi nd.Objectmapper" au printemps-autoconfigure-metadata.properties Fichier dans Spring-Boot-AutoConfigure -2.1.8.jar. Est-ce que c'est quoi faire l'autoconfigure? Où puis-je voir la liste de toutes les classes configurées automatiquement par Springboot?



0
votes

ObjectMapper Bean est créé par le démarrage à ressort car vous avez ObjectMapper CLASSE PRÉSENT DANS VOTRE CLASSPATH ET CODE JACKSONAUTOCONFIGURATION . C'est pourquoi vous pouvez passer à ce haricot sans créer explicitement.

Resttemplate D'autre part est un haricot que vous devez créer par vous-même - le ressort ne le fera pas pour vous car il n'y a pas de classe de configuration automatique qui pourrait déclencher la création de celle-ci.


2 commentaires

Merci. J'ai trouvé "org.springframework.boot.autoconfigure.jackson.jacksonautoc erguration.conditi oneonClass = com.fast erxml.jackson.databi nd.Ockjackson.databi nd.Objectmapper" au printemps-autoconfigure-metadata.properties Fichier dans Spring-Boot-AutoConfigure -2.1.8.jar. Est-ce que c'est quoi faire l'autoconfigure? Où puis-je voir la liste de toutes les classes configurées automatiquement par Springboot?


Oui, tous les haricots définis dans cette classe sont en cours de création par le ressort lorsque vous avez ObjectMapper dans votre catégorie de classe. Vous pouvez trouver toutes les classes de configuration automatique ici: github.com/spring-projects/spring-boot/tree/master/... . Vous pouvez exclure toute classe de configuration automatique à l'aide de @enableAutoconfiguration (exclude = {[classes à exclure]} Annotation.



0
votes

Très probablement Le ObjectMapper se contente d'une partie des dépendances transversales ou transitives de votre projet, mais le Resttemplate n'est pas. Donc, l'instance du ObjectMapper crée implicitement, tandis que le Resttemplate ne crée pas du tout. C'est donc une raison pour laquelle vous devez créer un haricot du Resttemplate explicitement.


0 commentaires

1
votes

Comme il est mentionné dans les documents de printemps. https: //docs.spring. IO / Spring-Boot / Docs / Current / Référence / HTML / Boot-Features-Resttemplate.html

Si vous devez appeler des services de repos à distance à partir de votre application, vous pouvez utiliser la classe RestTemplate de Spring Framework's Framework. Étant donné que les instances de repose-repose doivent souvent être personnalisées avant d'être utilisées, la chaussure à ressort ne fournit aucun haricot de reston-fixé auto-configuré. Il est toutefois de configurer automatiquement un bloc Resttemplate, qui peut être utilisé pour créer des instances de repose-mémoire en cas de besoin. Le plafond Resttemplate de configuration automatique garantit que les protocoles httpmessagecverters sensibles sont appliqués aux instances de repose-plaques.


0 commentaires

0
votes

Comme indiqué par d'autres utilisateurs, il est correct, il n'y a pas de haricot par défaut défini au ressort pour la plaque de repos. La méthode préférée est d'utiliser org.springframework.boot.web.client.restemplatebuilder pour la construction du modèle de repos.

un exemple donné ci-dessous. P>

@Service
public class RestServiceCaller {

  private RestTemplate restTemplate;

  @Autowired
  RestServiceCaller(RestTemplateBuilder builder) {
     restTemplate = builder.build();
  }

 ........
 .....//here you will have other methods which make use of this restTemplate
}


0 commentaires