当前,我正在使用OData服务与SAP进行集成开发。我的客户端应用程序基于JAVA 8 Spring。
问题:
在我的客户端应用程序中,当我使用spring react 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进行GET调用 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 –是我的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跟踪:
获取sap / opu / odata / sap / Service / Set(RUNTYPE ='TEST',DATA ='%25F2ON%25F2CLOUD')/?sap-client = XXX&spnego = disabled 用户代理:ReactorNetty / 0.7.15.RELEASE 主机:hostname:port 接受编码:gzip 接受:application / 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版
如果您需要更多信息,请告诉我。