目前我正在使用 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
如果您需要更多信息,请告诉我。