当前位置: 首页 > 知识库问答 >
问题:

SpringCloudAPI网关传递动态参数值

盖嘉珍
2023-03-14

我正在学习如何使用SpringCloud构建API网关。我已经浏览了有关如何传递参数的文档,所有示例似乎都显示了它们是硬编码的。但如果我有一个动态值呢?

例如,我有这种类型的请求:http://localhost:8080/people/lookup?searchKey=jdoe,

如何通过“jdoe”部分?

我尝试了下面的代码,只有当我硬编码代码中的值时,它才能工作。

我不确定如何使用提供的生成器方法访问该值。这是一个如此简单的场景,但我惊讶地发现,没有太多的例子或文档,所以只有我一个人。

@SpringBootApplication
@EnableEurekaClient
public class ApiGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("people-service", r -> r.path("/people/active-associates")
                        .uri("lb://people-service"))
                .route(r -> r.path("/people/lookup")
                          .filters(f -> f.addRequestParameter("searchKey",  howDoIPassDynamicValueHere))
                          .uri("lb://people-service")
                          .id("addrequestparameter_route"))
                .build();
    }

当我直接调用服务时,这显然是有效的,因为我的微服务控制器使用@RequestParam。。。非常简单:

@RestController
@RequestMapping(value = "/people")
public class PersonController {

    @Autowired
    private PersonService personService;

    /**
     * Searches by FirstName, Lastname or NetworkId.
     * 
     * @param searchKey
     * @return ResponseEntity<List<Person>>
     */
    @GetMapping(value = "/lookup")
    public ResponseEntity<List<Person>> findPersonsBySearchKey(@RequestParam(name = "searchKey") String searchKey) {
        List<Person> people = personService.findActivePersonsByFirstLastNetworkId(searchKey.trim().toLowerCase());
        return new ResponseEntity<List<Person>>(people, HttpStatus.OK);
    }
    }

共有1个答案

施永宁
2023-03-14

多亏了这些评论,我开始明白了。我想当我读到关于过滤器的addquiestParameter()方法的留档时,我确实想得太多了。我认为如果我的请求有参数,我需要使用该方法。我挠头一天了,真不敢相信有这么简单。所以我只需要移除过滤器就可以了:

@SpringBootApplication
@EnableEurekaClient
public class ApiGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("people-service", r -> r.path("/people/active-associates")
                        .uri("lb://people-service"))
                .route(r -> r.path("/people/lookup")
                          .uri("lb://people-service"))
                .build();
    }
}
 类似资料:
  • 问题内容: 我使用JavaScript来执行JNLP,最终将执行我的客户端。 我试图通过JavaScript执行将参数传递给JNLP,并在客户端中通过JNLP传递这些参数。 JavaScript正在执行以下URL,例如: 现在,我的JNLP将尝试以这种方式获取参数: 但这没有用。 我无法以这种方式在客户端代码中检索这些参数: JNLP位于APACHE2.2中 知道有什么问题吗? 问题答案: 为了能

  • 我正在尝试将API网关与Lambda代理集成, API服务器接收带有以下参数的请求,即邮政编码和住所 代码:

  • 但是,我如何将我预定义的查询字符串参数传递到这个生成的API类中呢? 我也尝试过使用模型,但是我也没有看到将模型数据传递到iOS SDK中的方法。

  • 问题内容: 我是Spring的新手。 这是bean注册的代码: 这是我的bean类: 这是我执行操作的主要方法: 现在,我想用参数调用此构造函数,并且这些参数是在我的主要方法中动态生成的。这就是我想动态传递- 而不是像文件中声明的那样静态传递的意思。 问题答案: 请看一下构造函数注入。 此外,请查看IntializingBean和BeanPostProcessor,以了解Springbean的其他

  • 我不熟悉Spring。 这是bean注册的代码: 这是我的豆子课: 这是我执行动作的主要方法: 现在我想用参数调用这个构造函数,这些参数是在我的主要方法中动态生成的。这就是我想动态传递的意思——而不是静态传递,就像我的文件中声明的那样。

  • 本文向大家介绍vue v-on:click传递动态参数的步骤,包括了vue v-on:click传递动态参数的步骤的使用技巧和注意事项,需要的朋友参考一下 最近项目中要为一个循环列表动态传送当前点击列的数据,查了很久资料也没有一个完美的解决方案, 新手只能用vue的事件处理器与jquery的选择器做了一个不伦不类的方案,居然也能解决这个问题,作此记录留待以后会有更好的方法解决这个事情 需求:根据每