1

目前我正在使用 OData 服务与 SAP 进行集成开发。我的客户端应用程序基于 JAVA 8 Spring。

问题:

从我的客户端应用程序中,当我使用 spring 响应式 webclient 执行 GET 时 - SAP 无法处理请求。但是当我在 Firefox-REST 客户端中使用相同的 URL 时,我得到了正确的响应。只有当我们在某些 URL 值中有“/”时才会发生这种情况。

这是我的网址。

http://host:port/sap/opu/odata/sap/Service/Set(RUNTYPE= 'TEST',DATA='/ON/CLOUD')/?sap-client=XXX&spnego=disabled

字段 DATA='/ON/CLOUD' 在这里造成了麻烦。(请注意,当我不使用“/”时,一切正常)

我通过手动转义“/”来尝试这个: - 这在 REST 客户端 http://host:port/sap/opu/odata/sap/Service/Set(RUNTYPE= 'TEST',DATA='%2FON %2FCLOUD')/?sap-client=XXX&spnego=disabled

但是当我使用上述 URL 从我的 java 客户端执行 GET 时,SAP 抱怨 URL 格式错误。当我检查 SAP 中的日志时,出于某种原因,我的客户端程序使用以下 URL http://host:port/sap/opu/odata/sap/Service/Set(RUNTYPE= 'TEST',DATA='% 252FON%252FCLOUD')/?sap-client=XXX&spnego=disabled

所以 '%2FON%2FCLOUD' 在 GET 调用中转换为 '%252FON%252FCLOUD'。

我想转义 '%' 并使用我发送的任何 URL。你能帮我在哪里解决这个问题吗?

这是我目前正在使用的代码。

url – 是我的网址

{
        Mono<String> mono;
            mono = webClient().get()
                    .uri(url)
                    .accept(MediaType.APPLICATION_JSON)
                    .exchange()
                    .doOnError(e -> { throw new HttpException("Error executing GET request", e); } )
                    .doOnSuccess(onSuccess -> res = onSuccess)
                    .flatMap(clientResponse -> clientResponse.bodyToMono(String.class));
        String body = mono.block();
        log.debug("Response object: {}", res);
        log.info("Get returned: {}", body);
        checkClientResponseCode(res, HttpStatus.OK, body);
        return body;

}

非常感谢你的帮助。

更多信息:

这是 JAVA 客户端的 http 跟踪:

GET sap/opu/odata/sap/Service/Set(RUNTYPE='TEST',DATA='%25F2ON%25F2CLOUD')/?sap-client=XXX&spnego=disabled 用户代理:ReactorNetty/0.7.15.RELEASE 主机:主机名:端口接受编码:gzip 接受:应用程序/json 授权:基本 AuthorizationKey==

我实际上将以下 URL 发送到 Spring WebClient sap/opu/odata/sap/Service/Set(RUNTYPE='TEST',DATA='%2F2ON%2F2CLOUD')/?sap-client=XXX&spnego=disabled

我的春季版本: springBootVersion = '2.0.9.RELEASE'

我的 SAP 版本:SAP FPSL 版本 753

如果您需要更多信息,请告诉我。

4

0 回答 0