gpt4 book ai didi

spring-cloud - Spring Cloud Feign 客户端可以与 Spring Web Controller 共享接口(interface)吗?

转载 作者:行者123 更新时间:2023-12-04 02:04:54 27 4
gpt4 key购买 nike

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

测试它我有点惊讶它实际上适用于 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 客户端而不直接注释它?

最佳答案

Feign 8.6.0 开始,这是可能的.来自 Spring Cloud docs :

Feign Inheritance Support

Feign supports boilerplate apis via single-inheritance interfaces. This allows grouping common operationsinto convenient base interfaces. Together with Spring MVC you canshare the same contract for your REST endpoint and Feign client.

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 {

}

关于spring-cloud - Spring Cloud Feign 客户端可以与 Spring Web Controller 共享接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com