首页 > 解决方案 > 错误“无法使用请求路径构造 OData 请求的 URI”SAP Java VDM withQueryParameter

问题描述

我使用 SAP SDK 3.29.1 在 Java 中创建了一个 CAP VDM。在事件处理程序@On read 中,我想将输入过滤器传递给 VDM。

埃斯。

@On(event = CdsService.EVENT_READ, entity = "XXXX")
public void readXXX(CdsReadEventContext context) throws ODataException {

final String filter = context.getParameterInfo().getQueryParameter("$filter");
final List<XXXXX> dati = new DefaultXXXService().getAllXXXX().select().withQueryParameter("$filter", filter).executeRequest(dest);

}

在日志中运行查询时,我收到错误消息:“无法使用请求路径为 OData 请求构造 URI ...”“索引 95 处的查询中存在非法字符 ....”

但是路径和过滤器适合调用,你能帮我吗?

在旧版本的 sdk 中,我使用了:

FilterExpression filtriFrontEnd =FilterExpressionConverter.convertTo(queryRequest.getQueryExpression());

final List<XXXX> area = new DefaultXXXXService().getAllXXX().filter(new UncheckedFilterExpression<>(filtriFrontEnd)).select().execute(new ErpConfigContext("XXX"));

谢谢你。

标签: sap-cloud-sdk

解决方案


在日志中运行查询时,我收到错误消息:“无法使用请求路径为 OData 请求构造 URI ...”“索引 95 处的查询中存在非法字符 ....”

您可以检查以下是否适合您..?

import com.sap.cloud.sdk.datamodel.odata.client.request.ODataUriFactory;

final String filter = context.getParameterInfo().getQueryParameter("$filter");
final String encodedFilter = ODataUriFactory.encodeQuery(filter);
final List<XXXXX> dati = new DefaultXXXService().getAllXXXX().select().withQueryParameter("$filter", encodedFilter ).executeRequest(dest);

请让我知道,因为这可能是一个需要解决的问题。


推荐阅读