我正在尝试使用Spring WebClient读取OGC WFS源的GML数据。但是,服务的输出格式定义

问题描述 投票:0回答:0

有效的服务链接看起来像这样:
https://www.luis.sachsen.de/arcgis/services/wasser/hochwassergefaehrdung/MapServer/WFSServer?service=WFS&request=GetFeature&typename=hochwassergefaehrdung:Gefaehrdung_bei_HQ100&srsName=urn:ogc:def:crs:EPSG::25833&VERSION=2.0. 0&outputformat = text/xml;%20 subType = gml/3.1.1&bbox = 406311.9936150059,5651815.157329135,413721.3886195286,56633092.92.940725,253425 ::

这是该方法的样子:

    private static final WebClient webClient = WebClient.create();

    public static String fetchRemoteText(String url) {
        try {
            return webClient.get().uri(url).retrieve().bodyToMono(String.class).doOnSuccess(body -> {
                if (body == null || body.isBlank()) {
                    log.info("Empty result returned.");
                }
            }).block(); 
        } catch (Exception e) {
            log.error("Error fetching from URL {}: {}", url, e.getMessage(), e);
            return null;
        }
    }
我尝试了Chatgpt建议的很多变化,但它们都没有帮助。

Spring Web客户端具有一组可能的MIME类型。不支持您的格式,因此您可以在处理之前尝试覆盖内容类型的标头。在第一行中,尝试使用构建器而不是创建Wearclient。 WebClient.builder() .defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_VALUE) .filter(ExchangeFilterFunction.ofResponseProcessor(response -> Mono.just(response.mutate() .headers(headers -> { String contentType = headers.getFirst(HttpHeaders.CONTENT_TYPE); if (contentType != null && contentType.contains("subtype=gml/")) { headers.set(HttpHeaders.CONTENT_TYPE, "text/xml;charset=UTF-8"); } }) .build()) )) .build();

您也可以替换DoOnnext函数的DoOnsuccess。

java spring http-headers gml-geographic-markup-lan
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.