Я пытаюсь реализовать настраиваемый фильтр маршрута, который вызывает отдельную службу и получает схему 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());
};
}