Est-ce qu'une interface client partage Spring-Cloud Feindre avec un contrôleur Spring Web?

voix
7

Construire un point final et le client avec le client Spring MVC et Feindre (avec des nuages ​​de printemps). J'ai eu l'idée que puisque les deux extrémités doivent avoir les mêmes annotations - et qu'ils doivent être à peu près dans la synchronisation. Peut-être que je pourrais les définir dans une interface et ont les deux extrémités qui mettent en œuvre.

Le tester j'été un peu surpris que cela fonctionne réellement pour la fin Web du printemps.

Mais ce que je ne peux pas trouver un moyen de faire la même chose pour un client Feindre.

J'ai essentiellement l'interface:

@RequestMapping(/somebaseurl)
public interface ServiceInterface {
  @RequestMapping(value = /resource/{identifier}, method = RequestMethod.POST)
  public SomeResource getResourceByIdentifier(String identifier);
}

Et puis le RestController

@RestController
public class ServiceController implements ServiceInterface {
    public SomeResource getResourceByIdentifier(@PathVariable(identifier) String identifier) {
    // Do some stuff that gets the resource
        return new SomeResource();
    }
}

Et puis enfin le client Feindre

@FeignClient(serviceName)
public interface ServiceClient extends ServiceInterface {
}

Le client Feindre semble pas lire les annotations héritées. Donc, il y a une autre façon que je peux faire la même chose? Où je peux faire le ServiceInterface en client Feindre sans annoter directement?

Créé 26/03/2015 à 17:20
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
8

Ceci est possible de Feindre 8.6.0 . Des printemps de Cloud docs :

Soutien Feindre Héritage

Feign supporte apis-partout via des interfaces unique héritage. Cela permet de regrouper les opérations courantes dans les interfaces de base commodes. En collaboration avec Spring MVC, vous pouvez partager le même marché pour votre point de terminaison REST et le client Feindre.

UserService.java

public interface UserService {

    @RequestMapping(method = RequestMethod.GET, value ="/users/{id}")
    User getUser(@PathVariable("id") long id);
}

UserResource.java

@RestController
public class UserResource implements UserService {

}

UserClient.java

@FeignClient("users")
public interface UserClient extends UserService {

}
Créé 08/09/2015 à 17:02
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more