有效的服务链接看起来像这样: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();