如果使用@webfilter,如何验证请求正文

时间:2019-07-05 05:22:22

标签: java spring-webflux

我想通过使用@webfilter验证请求正文,但只能在AbstractMessageReaderArgumentResolver.readBody之后才能在@webfliter中获取请求正文。 那么我如何在@webfliter中获取请求正文?

DefaultServerWebExchange已实现initFormData,我尝试过,但似乎不起作用。

私有静态Mono> initFormData(ServerHttpRequest请求,             ServerCodecConfigurer配置器,字符串logPrefix){

    try {
        MediaType contentType = request.getHeaders().getContentType();
        if (MediaType.APPLICATION_FORM_URLENCODED.isCompatibleWith(contentType)) {
            return ((HttpMessageReader<MultiValueMap<String, String>>) configurer.getReaders().stream()
                    .filter(reader -> reader.canRead(FORM_DATA_TYPE, MediaType.APPLICATION_FORM_URLENCODED))
                    .findFirst()
                    .orElseThrow(() -> new IllegalStateException("No form data HttpMessageReader.")))
                    .readMono(FORM_DATA_TYPE, request, Hints.from(Hints.LOG_PREFIX_HINT, logPrefix))
                    .switchIfEmpty(EMPTY_FORM_DATA)
                    .cache();
        }
    }
    catch (InvalidMediaTypeException ex) {
        // Ignore
    }
    return EMPTY_FORM_DATA;
}

0 个答案:

没有答案