настраиваемый фильтр маршрутов для облачного шлюза Spring - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь реализовать настраиваемый фильтр маршрута, который вызывает отдельную службу и получает схему JSON, затем он использует эту схему для проверки тела запроса json и либо перенаправляет вызов, если он действителен, либо возвращает сообщение об ошибке пользователю. У меня проблемы с получением ответа json от объекта ServerHttpRequest, и я очень не уверен, как связать эти шаги вместе. Вот мой код.

@Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            ServerHttpRequest request = exchange.getRequest();
            if (!request.getHeaders().containsKey("api_key") || StringUtils.isBlank(request.getHeaders().get("api_key").get(0)) ) {
                throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "no api_key header present"); 
            }
            WebClient client = WebClient.create(url);
            client.get().retrieve().bodyToMono(String.class)
            .map(s -> new JSONTokener(s))
            .map(obj -> new JSONObject(obj))
            .map(json -> SchemaLoader.load(json))
            .doOnNext(validator -> validator.validate(new JSONObject("")))
            .doOnError(error -> {
                log.error("The following error happened on getSchema method!: {}", error.getMessage());
                throw new ValidationException(error.getMessage());
            }).subscribe();
            return chain.filter(exchange.mutate().request(request).build());
        };
    }
...