我有一个 Spring Boot 应用程序,公开了 REST 请求的一些端点。我正在尝试解耦两个组件(当前直接调用彼此的代码),并且我希望它们相互发出 REST 请求(用于最终的微服务实现)。我知道端点发现可以通过发现服务(例如 Eureka)来完成,但是有没有办法将参数信息从需要它的服务传递给请求它的客户端? 示例:我有一个购物车服务,该服务依赖于有关可购买产品的信息。使用 Eureka(或其他服务发现工具),我可以注册我的服务,以便购物车服务现在知道产品服务。如果产品服务有类似:
@GetMapping("/product")
public Product findById(@RequestParam int id) {
return products.find(id);
}
我知道要使用此端点来获取 ID 为 3 的产品,购物车服务必须向 http://localhost:1234/product?id=3 发出请求。 ,但是有没有一种方法可以在运行时发现这些参数及其所需的类型?在我的示例中,如果我使用 Eureka,购物车服务会动态了解产品服务的位置,但不会了解其端点将接受的参数。我知道 Spring Boot Actuator 应该提供此信息,但每当我使用它时,端点的 params 字段始终为空。
最佳答案
Is there a way that it can discover these parameters and their required types at run time?
您在运行时真的需要这些信息吗?
因为如果你在开发时需要这个会简单得多。然后你可以使用类似 Swagger 的东西,它将提供服务规范端点。它甚至可以为您的服务生成一个客户端。
但是,如果您确实想要在运行时使用它,那么使用 HATEOAS API 可能会更好。 HATEOAS(超媒体作为应用程序状态引擎)意味着您的 API 是可导航的。这意味着客户端可以按照所提供的链接“抓取”您的 API,就像人类浏览网站一样。它有多大用处,取决于您想要实现的目标。
对此有两种流行的“解决方案”:
Spring Boot 有 HAL 支持,请参阅 spring-boot-starter-hateoas .
关于java - 是否可以在 Spring Boot 应用程序中发现端点参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60494814/