12

使用 Spring MVC 和 Feign Client(使用 Spring Cloud)构建端点和客户端。我的想法是,由于两端需要具有相同的注释 - 并且它们必须非常同步。也许我可以在接口中定义它们并让两端实现它。

测试它我有点惊讶它实际上适用于 Spring Web 端。

但是我找不到为 Feign 客户做同样事情的方法。

我基本上有界面:

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

然后是 RestController

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

最后是 Feign 客户端

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

Feign 客户端似乎没有读取继承的注释。那么还有其他方法可以完成同样的事情吗?我可以在哪里将 ServiceInterface 变成 Feign 客户端而不直接注释它?

4

1 回答 1

17

这在Feign 8.6.0中是可能的。来自Spring Cloud 文档

Feign 继承支持

Feign 通过单继承接口支持样板 API。这允许将常用操作分组到方便的基本接口中。与 Spring MVC 一起,您可以为 REST 端点和 Feign 客户端共享相同的合约。

用户服务.java

public interface UserService {

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

用户资源.java

@RestController
public class UserResource implements UserService {

}

用户客户端.java

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

}
于 2015-09-08T17:02:08.010 回答