Я изучаю, как создать API-шлюз с помощью Spring Cloud. Я просмотрел документацию о том, как передать параметр, и все примеры, кажется, показывают, что они жестко запрограммированы. Но что, если у меня есть значение Dynami c?
Например, у меня есть такой тип запроса: http://localhost: 8080 / people / lookup? SearchKey = jdoe ,
Как передать "jdoe" часть?
Я пробовал следующий код, и он работает, только если я жестко закодирую значение в коде. т.е. .filters(f -> f.addRequestParameter("searchKey", "jdoe")
. Этот тест также доказывает, что мой сервер обнаружения (Eureka) работает.
Я не уверен, как получить доступ к значению с помощью предоставленных методов построения. Это такой простой сценарий, но я с удивлением обнаружил, что для него не так много примеров или документации, так что это должен быть только я.
@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);
}
}